redis相关问题

redis理解

A.执行流程

缓存雪崩

A. 触发缓存雪崩的两种状况

  1. redis挂了,请求全走数据库
  2. 对缓存数据设置了相同的过时时间,致使某段时间,缓存所有同时失效,请求全走数据库

B. 解决方案

  1. 缓存的过时时间加上一个随机值,就能够减小缓存在同一时间过时。
  2. 假如redis真的挂啦,能够设置本地缓存+限流,避免redis挂了。假如挂了,redis持久化,重启后自动从磁盘上加载数据,快速恢复缓存数据。

缓存穿透

A. 触发缓存穿透状况

  1. 请求的数据在缓存大量不命中【负数】,致使请求走数据库。

B. 解决方案

  1. 由于请求参数是不合法,咱们能够用过滤器进行拦截,不合法就不让这个请求到数据库层!
  2. 当数据库找不到,咱们能够将空对象设置到缓存里面,下次请求从缓存中获取。【这个缓存时间能够设短一点】

缓存击穿

A. 触发缓存击穿状况

  1. 缓存在某个时间点过时的时候,刚好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过时通常都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。

B. 解决方案

  1. 使用互斥锁。在根据key得到的value值为空时,先锁上,再从数据库加载,加载完毕,释放锁。若其余线程发现获取锁失败,则睡眠50ms后重试。【容易形成死锁问题】
  2. 布隆过滤器,迅速判断一个元素是否在一个集合中。【将已存在的缓存放到布隆过滤器中,当黑客访问不存在的缓存时迅速返回避免缓存及DB挂掉。】

什么是缓存与数据库双写一致问题?

A.触发读写不一致的缘由

  • 数据更新时,各类状况就会形成数据库和缓存的数据不一致了

B.解决方案

  • 先删除缓存,在更新数据库
    • 在高并发下表现不如意,在原子性被破坏时表现优异
  • 先更新数据库,再删除缓存(Cache Aside Pattern设计模式)
    • 在高并发下表现优异,在原子性被破坏时表现不如意

未完待续

参考掘金大佬博客

相关文章
相关标签/搜索