前言
在网路上已经有许多针对 Redis PubSub 的功能、优缺点、规格等有非常详细的解说
但大部分的介绍并不会告诉你在哪些情景下使用,如何权衡优缺点
最近在开发上遇到了 Redis PubSub 的实战改良场景
虽然我不是主力开发这项问题的人,但稍微有点关係就趁机研究了一下
既然机会难得,于是有了这篇的诞生
本篇中并不会详细说明 Redis PubSub,如不知道的话可以参考 Redis 的官方文件
开发场景
一般在开发上很常见到开关按钮的需求
例如在家中闭关总电源开关,家里的电器都会停止工作
这个需求做起来其实很简单,如图所示,只需要做出两个 API
一个用于设定状态,另一个用于取得状态
瓶颈与问题
不过这个简易架构会遇到两个问题
1
虽然 Redis 有着优越的读写性能,但开关状态实际上很少会更改
这是经典的多读少写场景,所以你的效能会全部浪费在重複的读取开关上
2
这时会想着,想要减少 Redis 的压力,这时候增加 local cache 就可以解决
但是这更现实,基本上有流量的伺服器可能是个 cluster
所以做 local cache 会让你的状态无法同步,功能产生问题
改良方法
这时候根据遇到的瓶颈,即可利用 PubSub 来进行处理
不需要在每次需要知道状态的时候去读取,反之当状态被修改的时候,等人家来告诉我
但需要注意的事情是,如果使用 PubSub 的时候是不会储存资料在 Redis 中的
需要增加预防失败时的处理机制