redis相关问题
redis理解
A.执行流程
缓存雪崩
A. 触发缓存雪崩的两种状况
- redis挂了,请求全走数据库
- 对缓存数据设置了相同的过时时间,致使某段时间,缓存所有同时失效,请求全走数据库
B. 解决方案
- 缓存的过时时间加上一个随机值,就能够减小缓存在同一时间过时。
- 假如redis真的挂啦,能够设置本地缓存+限流,避免redis挂了。假如挂了,redis持久化,重启后自动从磁盘上加载数据,快速恢复缓存数据。
缓存穿透
A. 触发缓存穿透状况
- 请求的数据在缓存大量不命中【负数】,致使请求走数据库。
B. 解决方案
- 由于请求参数是不合法,咱们能够用过滤器进行拦截,不合法就不让这个请求到数据库层!
- 当数据库找不到,咱们能够将空对象设置到缓存里面,下次请求从缓存中获取。【这个缓存时间能够设短一点】
缓存击穿
A. 触发缓存击穿状况
- 缓存在某个时间点过时的时候,刚好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过时通常都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。
B. 解决方案
- 使用互斥锁。在根据key得到的value值为空时,先锁上,再从数据库加载,加载完毕,释放锁。若其余线程发现获取锁失败,则睡眠50ms后重试。【容易形成死锁问题】
- 布隆过滤器,迅速判断一个元素是否在一个集合中。【将已存在的缓存放到布隆过滤器中,当黑客访问不存在的缓存时迅速返回避免缓存及DB挂掉。】
什么是缓存与数据库双写一致问题?
A.触发读写不一致的缘由
- 数据更新时,各类状况就会形成数据库和缓存的数据不一致了
B.解决方案
- 先删除缓存,在更新数据库
- 先更新数据库,再删除缓存(Cache Aside Pattern设计模式)
未完待续
欢迎关注本站公众号,获取更多信息