Rdis速通
Rdis速通
- liunx下安装
安装
sudo apt-get update
sudo apt install redis-server
启动服务器
redis-server
开启客户端(这里默认是使用本地redis服务)
redis-cli
- CRUD
上面客户端连接到服务器之后我们可以开始进行操作了,因为redis的存储方式是基于内存的,所以速度很快,存储方式是Key-Vaule类型的,所以语法也比较简单。而且在客户端下可以还有有语法提示,非常的银杏
- 初级操作
注意,如果想显示中文的话,则进入客户端时的命令为redis-cli --raw
set key vaule #创建数据,redis的key默认是字符串形式,<br/>
get key #查找
del key #删除
exists key #判断是否存在
keys * / keys *me #查找全部key值/查找以me结尾的key值
flushall #删库跑路
expire key 秒数 / setex key 秒数 value #设置过期时间
TTL key #查看过期时间
quit #退出
clear #清屏
- 进阶操作(数据结构)
- 列表
lpush key value #向列表左边插入元素,可以同时插入多个(列表名字就是key)
lrange key start end #从左到右遍历列表元素
rpop key #删除列表左边第一个元素
llen key #查看列表长度
ltrim key start end #删除start-end以外的所有元素
- 集合(s开头,不可以重复)
sadd key value #向集合中插入元素
smembers key #查看集合的元素
sismember key value #value是否在集合key中
srem key value #删除集合key中的value元素
sinter/sunion/sdiff #两个集合之间的运算
- 有序集合(z开头,不可重复,但是每个值会对隐蔽搞一个浮点数,从而进行排序,这个浮点数是可以重复的)
zadd key 数值 value 数值 value #向集合中插入元素
zrange key start end withscore #显示集合起始元素 (包括分数)
zscore key value #显示value的值
zrank key value #显示value的排名(默认从小到大)
zrevrank key value #显示value的排名(默认从大到小)
zrem key value #删除元素
- 哈希(你可以理解成在redis这个大字典里嵌套小字典)
HSET hash_name key value #在hash_name这个字典里设置{name:value}的键值对
HGET hash_name key #查值
HGETALL hash_name #查所有键值对
HDEL hash_name key #删除
HEXISTS hash_name key #是否存在
-消息队列的实现
- 基于队列(无法实现消费者组,每次只能唤醒一个消费者)
#配合lpush和rpop可以实现简易的消息队列,但是rpop没有元素会返回nil,链接又断开了,不断轮训的话cpu会有压力,所以用brpop key 0 表示阻塞到来新的信息为止
-基于订阅(所有消费者都会收到信息,但是不支持可持久化(没有人订阅,消息会丢失),和历史信息)
subscribe 频道名 #订阅频道信息
publish 频道名 信息 #发布频道信息,这个信息不是键值对的形式
- 消息队列stream(X开头,redis5.0中引入,重点是可靠)
首先要创建消费者组,客户端加入到消费者组中,组间是共享的,组内的客户端是竞争关系
XGROUP CREATE mystream mygroup $ #mystream: 是你的流的名称。mygroup: 是你要创建的消费者组的名称。$: 表示消费者组应该从最新的消息开始消费。
XGROUP SETID mystream mygroup consumer1 $ #这将在消费者组 mygroup 中添加一个消费者 consumer1。
XREADGROUP GROUP mygroup consumer1 COUNT 1 STREAMS mystream > #GROUP mygroup consumer1: 指定消费者组和消费者。COUNT 1: 指定一次性从流中获取的消息数量(也可以换成BLOCK 0 阻塞的接受信息)。STREAMS mystream >: 指定要读取的流和读取的起始位置。
stream的可靠机制:支持确认机制和密等处理
每条消息ID右时间戳-序列号构成
消费者组维护两个:
last delivered ID,代表最后一个读过的ID
pennding list,表示正在处理的消息ID,它可以支持消息重试
(确认的消息会从这个list上消除,补偿服务会检查list有无长时间没有确认的,有则会处理改数据强制要求redis确认该信息,处理完之后,就消除,但如果原先卡主的进程恢复了,需要这个信息但list没有了,则会进行密等处理)
- 事务
和关系型数据库的事务有点不太一样,区别主要是它不能保证全部成功或者全部失败,它取决于里面的命令
MULTI #开启事务
命令
EXEC #提交事务
- 持久化
因为redis是基于内存的,不持久化的话电脑一关机数据就没有了,所以持久化是redis的一个很重要的特性
- RDB(Redis Database)
指定时间内把内存的的数据快照复制到硬盘上,方法有两个:
1.使用配置文件自动触发
2.用save命令,手动触发,或者bgsave,可以创建新的进程,主机程继续可以处理新的请求,但是也无法做到秒级的快照
- AOF(Append Only File)
直接追加文件,会把命令写入到一个日志文件,到时候可以直接执行日志文件,从而重建整个数据库
只需要在配置文件里加入: appendonly yes 即可
- redis集群
- 主从复制(主节点宕机了,需要手动提升从节点为主节点)
主节点负责写,从节点负责读(1对多的关系),主节点异步的把数据变化传输给从节点进行更新,从而实现数据一致
默认配置就是主节点,从节点的配置有两种方式一个就是执行命令,另一个就是修改配置文件(修改redis.conf更常用)
- 哨兵模式(自动故障转移)
监控(检查各节点是否正常),通知(哪个挂了,就通过发布订阅的方法通知其他节点),故障转移(主动升级从节点为主节点,并且把其他从节点连在这个上面)
哨兵自己也是一个进程,也会挂,所以一版生产环境会选三个哨兵,他们会自己推选出领导者,领导者挂了就重新推选