如何设计一个 redis 计数缓存?

20次阅读

共计 366 个字符,预计需要花费 1 分钟才能阅读完成。

场景是这样的:需要对通知未读数量进行缓存。大概有如下三种操作:

  1. 读取这个“未读数量”,如果 redis 缓存里不存在,则从 db 里计算出这个值,然后写入 Redis 缓存,即调用 Redis 的 SET。
  2. 增大这个数值。当有新的通知发给用户的时候,需要调用 INCR 把计数加一。
  3. 减小这个数值。当用户在客户端点击一条未读通知时,需要调用 DECR 把即计数减一。

这存在一个 BUG,就是 2、3 两种操作都没有去检查缓存是否存在,那么当缓存失效之后,直接发生了 2、3 两种操作的时候,缓存里的这个“未读数量”就会变成 1 或者 -1.

现在准备在进行 2、3 操作的之前,都先进行缓存是否存在的检查。

突然想到,为什么 Redis 不提供 INCR/DECR 缓存不存在的时候,就报错的版本?这样就不用每次都去检查缓存是否存在。只需要处理这个报错,然后再去初始化缓存即可,这样性能不是更好?

正文完
 0