Redis--扩展
Redis5.0---Stream
Redis Stream----它是一个新的强大的支持多播的可持久化消息队列。
它有一个消息链表,将所有加入的消息都串起来,每个消息都有个唯的 和对应的内容 消息是持久化的, Redis 重启后,内容还在。
- xadd:向stram 追加消息。
- xdel :从 Stream 中删除消息,这里的删除仅仅是设置标志位,不影响消息总长度。
- xrange :获取 earn 中的消息列表,会自动过滤已经删除的消息。
- len 获取 Stream 消息长度。
- del: 删除整个 Strea 消息列表中的所有消息。
Stream 消息太多怎么办
以它提供了一个定长 位巳am 功能。在 add 的指令中提供个定长长度参数 axlen ,就可以将老的消息干掉 确保链表不超过指定长度。
Stream 的高可用
Strea 的高可用是建立在主从复制基础上的,它和其他数据结构的复制机制没
有区别 ,也就是说在 Sentinel 和 cluster 集群环境下 Stream 是可以支持 可用的。
不过鉴于 redis 的指令复制是异步的,在 failover 发生时, Redis 可能会丢失极小部分数据,这一点 Redis 的其他数据结构也是 样的。
Info指令--查询信息
Redis 每秒执行多少次指令
redis- cli inf o stats lgrep ops
instantaneous ops per sec:789
以上表示 ops 789 ,也就是所有客户端每秒会发送 789 条指令到服务器执行。
Redis 连接了多少客户端
这个信息在 Clients 块里,可以通过 info clients 看到
redis-cli info clients
# Clients
connected clients:124 #这个就是正在连接的客户端数量
client longest output st:0
cl ent biggest input buf:0
blocked c lients :0
Redis 内存占用多大
redis- cli info memory I grep used I grep human
used memory human:827.46K #内存分配器( jemalloc )从操作系统分自己的内存总量
used_memory rss_human : 3 .61M #操作系统看到的内存占用, top 命令看到的内存
us ed memory peak_human:829.41K # Redis 内存消耗的峰值
used memory lua human:37 . 00K # lua 脚本引擎占用的内存大小
分布式锁---集群环境
Sentinel 集群中,当主节点挂掉时,从节点会取而代之,但客户端上却并没有明显感知。
比如,原先第一个客户端在主节点中申请成功了 把锁,但是这把锁还没有来得及同步到从节点,主节点突然挂掉了,然后从节点变成了主节点,这个新的主节点内部没有这个锁,所以当另-个客户端过来请求加锁时,立即就批准了。
这样就会导致系统中同样一把锁被两个客户端同时持有,不安全性由此产生。
Redlock 解决方案
加锁时,它会向过半节点发送 set(key, value, nx=True, ex=xxx)指令,只要过半节点 set 成功,就认为加锁成功。释放锁时,需要向所有节点发送 del指令。
不过Red lock 算法还需要考虑出错重试、时钟漂移等很多细节问题,同时因为 Redlock要向多个节点进行读写,意昧着其相比单实例 Redis 性能会下降-些。
redlock解决了redis集群部署下锁的问题,但降低了redis性能
Redis安全通信
Redis 本身并不支持 SSL 安全链接,不过有了 SSL 理软件,我们可以让通信数据得到加密,就好像 Redis 穿上了一层隐身外套一样
spiped是这样的一款 SSL 代理软件,它是 Redis 官方推荐的代理软件。
spiped 会在客户端、服务器各启动spiped 进程。
spiped 进程a 负责接受来自 Redis Client 发送过来的请求数
加密后传送到spiped 进程b ,b将接收到的数据解密后传递Redis Server 。然后 Redis Server 再走一个反向的流程将响应回复给 Redis Client。
每一个 spiped 进程都会有个监昕端 server socket )用来接收数据,同 时还会作为 个客户端 socket client )将数据转 目标地址。
spiped 进程需要成对 相互之间需要使用相同的共享密 密消息。
2021-11-13 17:59:45