Redis高级
1. 事务
127.0.0.1:6379> MULTI 127.0.0.1:6379> 事务块 127.0.0.1:6379> EXEC 或者 DISCARD
- MULTI 标记一个事务的开始。
- EXEC 执行所有事务块内的命令。
- DISCARD 取消执行事务块内的所有命令。
- WATCH key [key ...] 监视一个或多个key,如果在事务执行之前,key 被其他命令所改动,那么事务将被打断。
- UNWATCH 取消 WATCH 命令对所有 key 的监视。
2. 消息队列
Redis 使用 list 数据结构作为消息队列,rpush 生产消息,lpop 消费消息。当 lpop 没有消息的时候,要适当 sleep 一会再重试。如果不用 sleep,可以使用 blpop 指令,在没有消息的时候,它会阻塞直到消息到来。
使用 pub/sub 主题订阅者模式,可以实现 1:N 的消息队列。pub/sub 有个缺点,消费者下线的情况下,生产的消息会丢失。
redis 如何实现延时队列?
使用 sorted set,时间戳作为 score,消息内容作为 key 调用 zadd 来生产消息,消费者用 zrangebyscore 指令获取 N 秒之前的数据轮询进行处理。
3. 发布订阅
Redis pub/sub 是一种消息通信机制:发布者发送消息,订阅者接收消息。
127.0.0.1:6379> SUBSCRIBE channel [channel ...] #订阅频道 127.0.0.1:6379> PUBLISH channel message #在频道上发布消息