redis缓存击穿

当redis数据失效或者项目刚启动redis还没有对热点数据进行缓存,导致所有数据都会查询数据库。数据库有可能会被压垮。
image
解决办法:
1、全局锁
当查询redis时,如果redis没有数据,则获取全局锁,如果获取到锁,查询数据库,如果没有获取到锁,则尝试再次获取锁,假如拿到锁之后,先检查redis是否有数据,如果没有再去查数据库
2、对热点数据设置用不过期(物理不过期)。
3、image
对上图的步骤做解释:

  1. 先查询redis的是否有数据,有就返回,
  2. 如果数据的逻辑时间已经过期,当前线程获取全局锁,如果获取到全局锁,开启异步线程(蓝色的箭头),查询数据库,并将查询到的数据缓存到redis中,而此时的主线程直接返回旧的过期数据(第4步)。
  3. 如果没有获取到全局锁,则返回旧数据(第4步)。
posted @ 2025-07-08 08:56  Charlie-Pang  阅读(14)  评论(0)    收藏  举报