缓存问题[雪崩、击穿]

缓存穿透

查询缓存步骤:redis

  1. 查询K-V数据库缓存。存在返回
  2. 若是数据不存在,则查询后端sql数据库

缓存穿透sql

恶意请求会故意查询在redis等缓存数据库里面不存在的Key,来引起后端数据库的查询。若是数据量很大,则会增长后端的压力。这就是 缓存穿透数据库

如何避免?后端

  1. 请求过滤:对全部可能的请求查询先缓存(布隆过滤、BitMap存储...)。在Controller层请求过来进行校验,若是参数符合规则,那么放行,不符合则返回错误。
  2. 缓存空值:若是请求过来缓存数据库查不到同时后端数据库也查不到,则也缓存空值。可是要注意缓存的时间限制的短一些。下次再来请求直接返回缓存的空值。若是这个Key有数据Insert了,则须要当即删除缓存的空值,防止影响业务。
  3. 检查更新:每次有请求过来先检查 key过时时间,及时更新

缓存雪崩

当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,会给后端系统带来很大压力。致使系统崩溃。缓存

解决方案:服务器

  1. 高可用集群
  2. 限流降级、加锁
  3. 定时任务不断检查,预先更新快过时缓存

缓存并发

好比缓存雪崩后,大量的数据又从数据库里面查询后大量数据进行缓存。并发

解决方案:分布式

分布式锁、控制并发数it

相关文章
相关标签/搜索