场景是这样的:需要对通知未读数量进行缓存。大概有如下三种操作:
- 读取这个“未读数量”,如果 redis 缓存里不存在,则从 db 里计算出这个值,然后写入 Redis 缓存,即调用 Redis 的 SET 。
- 增大这个数值。当有新的通知发给用户的时候,需要调用 INCR 把计数加一。
- 减小这个数值。当用户在客户端点击一条未读通知时,需要调用 DECR 把即计数减一。
这存在一个 BUG ,就是 2 、3 两种操作都没有去检查缓存是否存在,那么当缓存失效之后,直接发生了 2 、3 两种操作的时候,缓存里的这个 “未读数量” 就会变成 1 或者 -1.
现在准备在进行 2 、3 操作的之前,都先进行缓存是否存在的检查。
突然想到,为什么 Redis 不提供 INCR/DECR 缓存不存在的时候,就报错的版本?这样就不用每次都去检查缓存是否存在。只需要处理这个报错,然后再去初始化缓存即可,这样性能不是更好?