Redis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU

啤酒理论

Buffer机制,减少没必要的来回调用

前置知识

只要和redis建立了连接,发送字符串,就能交互
Redis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU

管道

Redis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU

发布 / 订阅

help @pubsub

发送者

Redis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU

订阅者

Redis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU

  PSUBSCRIBE pattern [pattern ...]
  summary: Listen for messages published to channels matching the given patterns
  since: 2.0.0

PUBLISH channel message
summary: Post a message to a channel
since: 2.0.0

PUBSUB subcommand [argument [argument ...]]
summary: Inspect the state of the Pub/Sub subsystem
since: 2.8.0

PUNSUBSCRIBE [pattern [pattern ...]]
summary: Stop listening for messages posted to channels matching the given patterns
since: 2.0.0

SUBSCRIBE channel [channel ...]
summary: Listen for messages published to the given channels
since: 2.0.0

UNSUBSCRIBE [channel [channel ...]]
summary: Stop listening for messages posted to the given channels
since: 2.0.0

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

聊天室架构模型

  • 每个人能够收到实时消息
  • 上滑加载最近3天消息
  • 再上滑加载历史消息,所有消息都应该被存在数据库中

Redis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU可以启动不同的redis去接收订阅的消息,有的用来推送给用户,有的用来发给kafka,继而存储到数据库中
Redis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU

Redis事务

假设是client1绿色先开启的事务multi,client2黄色后开启的事务,
并且假设client2黄色的exec先到达,client1绿色的exec后到达:
Redis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU是先发送exec的客户端先执行命令
Redis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU

在事务中 watch 监控某个 key,如果发生改变,就不执行事务

Redis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRURedis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU

为什么 Redis 不支持回滚(roll back)

如果你有使用关系式数据库的经验, 那么 “Redis 在事务失败时不进行回滚,而是继续执行余下的命令”这种做法可能会让你觉得有点奇怪。

以下是这种做法的优点:

  • Redis 命令只会因为错误的语法而失败(并且这些问题不能在入队时发现),或是命令用在了错误类型的键上面:这也就是说,从实用性的角度来说,失败的命令是由编程错误造成的,而这些错误应该在开发的过程中被发现,而不应该出现在生产环境中。
  • 因为不需要对回滚进行支持,所以 Redis 的内部可以保持简单且快速。

有种观点认为 Redis 处理事务的做法会产生 bug , 然而需要注意的是, 在通常情况下, 回滚并不能解决编程错误带来的问题。 举个例子, 如果你本来想通过 INCR 命令将键的值加上 1 , 却不小心加上了 2 , 又或者对错误类型的键执行了 INCR , 回滚是没有办法处理这些情况的。

RedisBloom模块 - 布隆过滤器

解决缓存穿透问题
Redis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRURedis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRURedis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU
布隆过滤器:用小空间解决大量数据匹配的问题
Redis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU三种架构情况:
Redis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRURedis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU
更新完数据库,需要同步刷缓存 -> 双写问题

缓存淘汰策略

Redis实战(四):redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU

下节课预习

缓存常见问题:

  • 击穿
  • 雪崩
  • 穿透
  • 一致性
上一篇:jenkins pipeline docker 发布项目


下一篇:Unity边缘光shader