redis缓存

缓存的三种问题

  • 缓存穿透:大批量请求不存在的key,导致数据库压力增大。【解决方案】:布隆过滤器。
  • 缓存击穿:同一时间大批量请求一个过期的key,导致这些请求在同一时间访问数据库。【解决方案】:获取数据库后回写这个过程申请分布式锁,只有一个请求能获取后回写,其他一直重试等待。
  • 缓存雪崩:同一时间大批量key过期。【解决方案】:设置expire time的时候随机加1~5分钟的超时。

数据库和缓存一致性解决:
【Cache Aside Pattern】因为更新数据库后删除缓存的话,如果缓存删除失败,则会存在不一致的问题,所以需要先删除缓存后更新数据库。但是这里可能存在删除缓存后有其他请求判断缓存没有数据则从数据库中读取后回写导致的不一致问题,所以需要再进一步:删除缓存后,把缓存数据放到一个队列,其他请求到来的时候判断缓存里面没数据,再去队列里面查看,如果队列里面有这个缓存数据,则一直阻塞等待,知道前一个请求把数据库更新完毕后再唤醒。

comments powered by Disqus