redis穿透问题

1.概述

一个热点数据在高并发情况下过期时间到了,会导致大量流量查询redis为null,进而请求数据库进行更新数据,从流量上来说请求打到了数据库上,这种情况可能会造成mysql服务崩溃。

2. 解决方式之一(加锁解决之本地锁)

redis穿透问题_第1张图片

如果部署的服务是单机服务完全可以靠本地锁解决这个问题

具体流程查缓存->缓存存在直接返回 

查缓存->缓存不存在->sync方法再去查缓存是否存在,不存在则先查数据库,查到数据库set进redis->直接返回set的数据

**为啥需要再去查缓存才开始查数据库

**列子:A B C一起去查询某个数据 缓存不存在了 如果按不再去查缓存的话,A先获取了sync资源,然后已经set了数据库查到的值了,但是这个时候B排队(sync会自旋)又得到了资源,即便A已经设置缓存成功了,但是B还是会去重新查询数据库又设置缓存,明显不合理,因此可以继续加判断如果缓存查到了直接返回更合理。

3. 解决方式之一(加锁解决之分布式锁)

参考我的http://t.csdn.cn/pQte3

你可能感兴趣的:(spring,boot,redis,数据库,缓存)