Redis总结 其一 概述 安装 类型
为什么要用Redis?
数据库 磁盘IO太慢(原因需了解磁盘,磁道,扇区,操作系统) 内存级别数据库还太贵, 折中就是缓存
关系型数据库和非关系型数据库的区别:
关系型数据库是依据关系模型来创建的数据库,数据和数据之间有联系,非关系型数据库数据之间就没有联系
非关系型模型:列模型(Hbase),键值对模型(redis,MemcacheDB),文档类模型(mongoDB)
memcached和Redis的区别
memcached和Redis都是键值对模型,但是memcached没有类型的概念.
而redis中有,还有对应的方法
所以, 相对于memcached来说redis是计算向数据移动了
Redis怎么存储数据的
任何数据类型 Redis都不会直接将它放在内存中存储, 而是转而内部使用redisObject来存储以及表示所有类型的key-value.
type表示一个value对象具体是何种数据类型(如果你对这个key的操作和type支持的操作不匹配就之间返回),encoding是不同数据类型在redis内部的存储方式。
比如:type=string表示value存储的是一个普通字符串,那么encoding可以是raw或者int,而关于其他数据类型的内部编码实现如下图
Redis安装
准备下篇博客总结
https://blog.csdn.net/LionHearthz/article/details/124132111
安装的位置如下
Redis中的类型
String
- 字符类型
不带什么开头的操作:
set操作,get操作, getset操作(相对于get以后set减少一次io操作), mget操作, mset操作, msetnx操作(原子性操作), append操作,strlen操作, getrange(有正反向索引), setrangeset结尾如果加上nx就是无数据时才赋值
加上xx就是只能更新值,如果有就不更新
使用场景 nx 实现 分布式上锁 - 数值类型
incr, incrby, incrbyfloat, decr, decrby… - bitmaps
setbit, bitpos, bitcount, bitop(and, or)
8位是一个字节, setbit x 8 1的strlen也是1
场景: 1. 统计随机窗口内用户登陆天数
2. 统计随机窗口天数内用户登录数量
hashes
解决存储对象的问题, value中再存键值对
hget, hgetall, hincrby, hincrbyfloat, hkeys, hlen, hmget, hmset, hset, hvals
hkeys操作查询对应的表头, hvals查询出内容, hgetall查询出全部(包括表头和内容)
hincr 可以支持对内容数值数值计算, 可以支持点赞, 收藏等数据计算
lists
链表, redis中的key中还有指向list的头和尾两个指针.
L: List 或者 Left
R: Right
B: Block阻塞
命令:
- lpush, rpush左侧右侧推数据
- lpop(从右侧弹出), rpop
lpush和lpop同向的压入弹出就是栈
lpush和rpop反向压入弹出就是队列
- lrange, lindex, lset, 类似数组
- lrem, linsert, ltrim
- blpop, brpop 阻塞, 单播队列
sets
去重, 不维护排序(无序),
方法:
- sadd(添加元素, 自动去重), srem(移除)
- sdiff, sdiffstore, sunion, sunionstore, sinter, sinterstore (inter交集, union并集, diff差集(有方向的), store是返回一个sets类型的目标)
- sismember, smembers查询有多少元素
- srandmember随机事件, spop也是随机取出
例: 后接正数 取出一个不重复的结果集(不能大于已有的)
后接负数 取出一个带重复的结果集(满足数量)
解决: 抽奖 正数: 抽中过就不能再中了
负数: 中过还能中(奖品大于人数)
sorted sets
Z开头的是sorted sets
在sorted之后还要有sorted sets是为什么?
要排序的功能
问题来了, 你存的东西按照什么规则排序?
每个存入的sorted sets元素包含信息还有分值和正负向索引.
方法:
- zadd
- zincrby
- zcount(分值区间内有多少个元素)
- zrange(通过排名查看元素 分值从小到大)[方法后可加 withscores顺便看分值], zrangebyscore(正序看分值内的元素), zrevrangebyscore(倒序看)
- zrank 查看排名
- zunion[store]… 需要给出 权重weights, 和aggregate聚合参数(默认: 权重*分值求和, 还有max取最大值)
底层数据结构, 怎么实现排序? 速度怎样?
数据结构: skip list跳表(牺牲一些存储空间换速度)
涉及概念: 层数(0层是原数据), 元素插入时随机造层, 增和删还需要修改指针, 改=删+增
redis是二进制安全的(只传输字节流), 所以一定要沟通好客户端的编码.
其他类型包括
hyperloglogs、地理空间( geospatial)、消息(Streams)
还有些其他的操作:
flushall
,flushdb
,keys *
,type
,object encoding xx
,
redis默认16个区 可以通过select 区域号选择
Redis是单线程 单进程的
如何处理并发请求?
linux系统内核提供的 epoll这个方法(谁有数据处理谁)
内核的发展史
BIO时期
系统内核提供read方法, 是阻塞的
问题: 多个请求, 其中一个请求如果产生阻塞的话, 就只能通过抛出更多的线程处理多个请求, cpu资源会浪费, 内存也会被浪费
看系统内核方法:
man 2 方法名
查询文件描述符
cd /proc/进程号/fd
进程号怎么看
ps -fe [| grep 搜索名]
NIO时期(同步非阻塞 多路复用 epoll)
不阻塞, 一个线程就可以处理, 但是发生轮询(发生在用户空间)
- 同步非阻塞时期
死循环监控
问题: 用户态和内核态频繁切换, CPU保护现场恢复现场, 轮询调用次数太多
解决这个问题: 内核发展 -> select - 仍然是:同步非阻塞
内核系统调用 select方法 多路复用
内核监控 有数据内核再调read方法 减少了内核态和用户态的切换
问题: 仍然还是需要内核和用户态的切换并且需要返回哪些可以调用read
解决这个问题: 内核再发展 epoll(epoll_create, epoll_ctl, epoll_wait三个系统调用) 和 mmap(用户态和内核态 共享空间) -> 这样就不用经常拷贝数据了 - 共享空间中存放的数据结构是: 红黑树 和 链表
伪AIO时期
详细Redis和I/O多路复用的博客推荐:
https://blog.csdn.net/HD243608836/article/details/102849388
AIO Windows可以实现AIO
0拷贝 sendfile方法
nginx也是使用多路复用epoll
Redis总结 其一 概述 安装 类型相关推荐
- 高性能分布式缓存Redis(缓存分类 安装 数据类型选择和应用场景 发布订阅 事务 Lua脚本 慢查询日志)
高性能分布式缓存Redis 高性能分布式缓存Redis 1. 缓存发展史&缓存分类 1.1 大型网站中缓存的使用 1.2 常见缓存的分类 1.3 分布式缓存选型方案对比 2. Redis概述& ...
- redis(一) 安装以及基本数据类型操作
redis(一) 安装以及基本数据类型操作 redis安装和使用 redis安装 wget http://download.redis.io/redis-stable.tar.gz tar zxvf ...
- linux redis图形界面,linux安装redis和windows安装可视化工具
Redis的安装 本文使用的是redis-4.x的版本,因为有些新技能,所以还是想试试 下载redis的安装包: wget http://download.redis.io/releases/redi ...
- Redis入门篇(安装与启动)
Redis入门篇(安装与启动) 一.Redis介绍 Redis是NoSql的一种,在弄清楚Redis是个什么玩意之前,先了解下NoSql是什么. 1.什么是NoSql NoSql,全名:Not Onl ...
- MySQL基础知识-MySQL概述安装,单表增删改查,函数,约束,多表查询,事物
MySQL基础知识-MySQL概述安装,单表增删改查,函数,约束,多表查询,事物 前言 1.MySQL概述 1.1数据库相关概念 1.2MySQL数据库 1.2.1版本 1.2.2下载 1.2.3安装 ...
- 项目1在线交流平台-4. 使用radis高性能储存方案-1.redis入门-特点、安装与支持数据类型
文章目录 1.为何使用redis 1.1 NoSQL NoSQL数据库特点 常见NoSQL数据库 1.2 什么是redis,有何特点 1.3 为何选用redis 2. redis的安装与使用 2.1 ...
- Redis+在Linux中安装使用
Redis+在Linux中安装使用 一.安装 (一).上传redis安装包 (二).进入到rpmgcc文件下 (三).解压redis-3.2.5.tar.gz (四).启动redis 二.Redis概 ...
- Redis入门篇(安装与启动)(一)
一.Redis介绍 Redis是NoSql的一种,在弄清楚Redis是个什么玩意之前,先了解下NoSql是什么. 1.什么是NoSql NoSql,全名:Not Only Sql,是一种非关系型数据库 ...
- 大数据课程B1——Linux概述安装
文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Linux概况: ⚪ 掌握如何在虚拟机中安装Linux系统: 一.Linux系 ...
最新文章
- ssm整合 durid数据源 报错java.sql.SQLException: Access denied for user ‘xxx‘@‘localhost‘
- Leetcode每日一题:127.word-ladder(单词接龙)
- 滴滴、小米启动造车,特斯拉的护城河还能守多久?
- 南丁格尔邮票图片大全_【鉴赏】武夷山普通纪念币鉴赏(高清图片)
- 20190913:(leetcode习题)罗马数字转整数
- English trip EM2-LP-2A Around the world Teacher:Taylor
- Spring Boot 定时任务,怎么实现任务动态增删启停?
- 移动开发者的未来在哪里?
- c语言链表移动北理工,北京理工大学c语言网络教室 链表
- AD域权限分配_ADManager Plus对AD域管理有哪些帮助作用?
- PPT文件怎么快速压缩?
- MVC5局部视图的调用
- Bash玩转脚本3之几个指令有趣的筛选京东评价
- C++HANDLE的理解
- 辅修计算机的机械专业大二同学的跨考准备
- 表示自己从头开始的句子_形容从头开始的句子
- python 关键字field
- 方正计算机驱动程序,方正Founder A321驱动
- 同时查询多家快递物流情况,筛选出拒收单号归类为退回件
- EDI是什么?与其他通信手段有什么不同之处?
热门文章
- 【高级篇 / DNS】(7.0) ❀ 03. FortiGate作为Window DNS的备用DNS服务器 ❀ FortiGate 防火墙
- 在Windows10上编译SWASH模型
- 硬件入门之: 滞回比较器分析计算
- 定积分的基本性质5 区间可加性
- Android studio 打包项目,抛出异常keystore was tampered with,or password was incorrect!
- cass简码大全_考考你......列出 南方cass 简码指令50个。
- jpg图片太大怎么压缩变小
- VM虚拟机Ubuntu配置静态ip,亲测有效
- oracle remap语句格式,oracle通过expdp的remap_data实现简单的数据脱敏
- Qt 官方例子 Callout Example