1. Pipeline
Redis 管道(Pipelining)一次发送多个命令
节省往返时间
降低通讯成本
** 重要说明** : 使用管道发送命令时,服务器将被迫回复一个队列答复,占用很多内存。
2. 发布订阅 Pub/Sub
2.1 使用场景
- 发布订阅系统日志记录
- sentinel 之间互相发现
- 发布订阅解耦业务
2.2 常用命令
** PUBLISH channel message**
将信息 message 发送到指定的频道 channel
时间复杂度:O(N+M)N 是频道 channel 的订阅者数量
M 则是使用模式订阅(subscribed patterns)的客户端的数量。
** SUBSCRIBE channel [channel ...]**
订阅给指定频道的信息
时间复杂度:O(N)N 是订阅的channel的数量。
** UNSUBSCRIBE [channel [channel ...]]**
指示客户端退订给定的频道,若没有指定频道,则退订所有频道
时间复杂度:O(N)N 是订阅的channel的数量。
** PSUBSCRIBE pattern [pattern ...]**
订阅给定的模式(patterns) pattern 是对 channel 的匹配
时间复杂度:O(N)N 是订阅的模式的数量。
** PUNSUBSCRIBE [pattern [pattern ...]] **
指示客户端退订指定模式,若果没有提供模式则退出所有模式
时间复杂度:O(N+M)N 是客户端已订阅的模式的数量
M 则是系统中所有客户端订阅的模式的数量。
** PUBSUB subcommand [argument [argument ...]] **
PUBSUB 是一个查看订阅与发布系统状态的内省命令,它由数个不同格式的子命令组成
- PUBSUB CHANNELS [pattern]
列出当前active channels,活跃是指信道含有一个或多个订阅者
只对 SUBSCRIBE UNSUBSCRIBE 命令响应
- PUBSUB NUMSUB [channel-1 ... channel-N]
列出指定信道的订阅者个数
只对 SUBSCRIBE UNSUBSCRIBE 命令响应
- PUBSUB NUMPAT
返回订阅模式的数量
只对 PSUBSCRIBE PUNSUBSCRIBE 命令响应
3. 事务
将一组命令放在同一个事务中进行处理。
redis 是单进程的,如果有多个客户端发送的指令是排队执行的。
redis 事务不支持回滚,不同于数据库事务,保持了简单快速的特点
当事务执行时,哪个客户端的 EXEC 命令先到达就哪个先执行,如下图所示:
3.1 常用命令
** MULTI **
开启事务
** EXEC **
执行事务
当有WATCH 时,只有当被监视的键没有被修改,且允许检查设定机制时,EXEC会被执行
** DISCARD **
放弃执行事务
当有WATCH 时,DISCARD将释放所有被WATCH的key
** WATCH key [key ...]**
标记所有指定的key 被监视起来,在事务中有条件的执行(乐观锁)
** UNWATCH **
取消 WATCH 命令对所有 key 的监视
如果执行EXEC 或者DISCARD, 则不需要手动执行UNWATCH
4 Modules—RedisBloom
RedisBloom 扩展程序,提供了4种数据结构,Bloom filter, a cuckoo filter, a count-min sketch, a top-k。
Bloom 和 cuckoo filter 用来确定某元素是否为某集合的元素,工作原理
a count-min sketch 用作数据流中事件的频率表,散列函数将事件映射到频率
a top-k 用来维护 k 个最常出现的序列
4.1 Bloom Filter
利用布隆过滤器减少磁盘 IO 或者网络请求
** 使用 Bloom Filter 需注意 **
- 穿透了,不存在
- client,增加redis中的key,value标记
- 数据库增加了元素
- 完成元素对bloom的添加
bloom 缺点
- 查询性能相对弱,它是用 hash 函数在位图上不同的点跳跃探测, 很难利用 cpu 缓存
- 不支持删除
4.2 cuckoo Filter
布谷鸟过滤器并不是使用位图实现的, 而是一维数组. 它所存储的是数据的指纹
参考网站及网页