缓存问题学习笔记

缓存穿透

问题来源:缓存穿透指缓存中和数据库中都没有的数据,而用户不断发起请求。
解决方案

  • 接口层增加校验,将无效请求拦截
  • 从缓存中取不到的数据,在数据库中也没有取到,将缓存设置为null,缓存过期时间设置短点。可以有效防止攻击者反复用同一个id暴力攻击
  • 布隆过滤器

缓存击穿

缓存击穿是指缓存中没有但是数据库中有的数据,这时由于并发用户特别多,同时缓存没读到数据,又同时去数据库取数据,引起数据库压力瞬间增大
解决方案

  • 设置热点数据永不过期
  • 接口限流与熔断,降级。重要的接口一定要做好限流策略,防止用户恶意刷接口
  • 加互斥锁

缓存雪崩

问题来源:缓存中数据大批量数据到过期时间,而查询数据量巨大,引起数据库压力过大甚至宕机。和缓存击穿不同的是,缓存击穿指并发查同一条数据,缓存雪崩是不同的数据都过期了
解决方案

  • 缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生
  • 如果缓存数据库是分布式部署,将热点数据均匀分布在不同的缓存数据库中
  • 设置热点数据永不过期

缓存污染(或者满了)

缓存污染问题说的是缓存中一些只会被访问一次或者几次的数据,被访问完后,再也不会被访问到,但这部分数据仍然留存在缓存中,消耗缓存空间。如果缓存空间满了,再次写数据时,需要根据淘汰策略,删除数据

数据库和缓存一致性

  • 失效: 应用程序先从cache中获取数据,没有得到,则从数据库中获取数据,放到缓存中
  • 命中:应用层序先从cache中获取数据,取到后返回
  • 更新:先把数据存到数据库中,成功后,再让缓存生效

posted on 2022-12-01 10:04  每日问答  阅读(41)  评论(0)    收藏  举报

导航