Redis进阶学习—pipeline,pub/sub,事务,BloomRedis

379 阅读3分钟

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 需注意 **

  1. 穿透了,不存在
  2. client,增加redis中的key,value标记
  3. 数据库增加了元素
  4. 完成元素对bloom的添加

bloom 缺点

  1. 查询性能相对弱,它是用 hash 函数在位图上不同的点跳跃探测, 很难利用 cpu 缓存
  2. 不支持删除

4.2 cuckoo Filter

布谷鸟过滤器并不是使用位图实现的, 而是一维数组. 它所存储的是数据的指纹






参考网站及网页

redis.cn/

redis.io/

blog.csdn.net/cs958903980…