redis缓存击穿
当redis数据失效或者项目刚启动redis还没有对热点数据进行缓存,导致所有数据都会查询数据库。数据库有可能会被压垮。

解决办法:
1、全局锁
当查询redis时,如果redis没有数据,则获取全局锁,如果获取到锁,查询数据库,如果没有获取到锁,则尝试再次获取锁,假如拿到锁之后,先检查redis是否有数据,如果没有再去查数据库。
2、对热点数据设置用不过期(物理不过期)。
3、
对上图的步骤做解释:
- 先查询redis的是否有数据,有就返回,
- 如果数据的逻辑时间已经过期,当前线程获取全局锁,如果获取到全局锁,开启异步线程(蓝色的箭头),查询数据库,并将查询到的数据缓存到redis中,而此时的主线程直接返回旧的过期数据(第4步)。
- 如果没有获取到全局锁,则返回旧数据(第4步)。

浙公网安备 33010602011771号