缓存相关


缓存击穿

是指缓存中某一个key失效,如果出现高并发,则直接查询数据库,导致系统崩溃

解决方案:

加锁: 分布式锁
基于redis实现分布式锁.
锁的本质是: 可以放过一个请求,去数据库里查询,让其他的请求处于睡眠状态,放过的请求;查询到数据,放到缓存中后,再唤醒其他的请求,其他请求就直接查询缓存了,给数据库减轻了压力.			
             

缓存穿透

是指用户查询一个在数据库中根本不存在的数据,(数据库中没有这条记录),那么我们
做缓存的时候,不向缓存中放入数据的话,会导致缓存穿透.
:不进缓存,直接进入数据库

解决方式:

代码判断
  if(数据库也没有数据){
  在缓存中设置一个null值
  set 49 null 
  expire 49  60*10  设置一个10分钟失效
}
        
        

缓存雪崩

是指在同一时刻,缓存中的多个key全部失效,如果出现高并发,则会直接查询数据库

可能导致系统崩溃

解决方案:

缓存key,不要设置同一过期时间! expire key timout

缓存锁

本地锁(synchronized):

单服务
结果:没有问题
多服务(集群)
server.port 8206
server.port 8226
server.port 8236
结果:数据错误

结果

测试本地锁: 单击版本 没有问题

分布式锁

使用redis做分布式锁(redisson )


文章作者: zrh
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zrh !
  目录