Redis缓存击穿、雪崩、穿透解决方案
1、首先看看逻辑方面是否还有优化空间,正常流程查询redis中获取不到数据,则去数据库获取,但数据库查询并返回时,调用异步方法,将该数据存储进redis中,并设置一个较短的过期时间,同时利用redis,对该条数据进行标记。如通过map存储热点数据,并记录近期访问次数。由定时任务定期检测新尝试的一批热点数据,当近期访问次数到达一定的阈值以后,将该数据正式标记为热点数据,则不在采用短期的过期时间,而是采用长期过期时间。对于多次认定为热点数据的也可以设置永不过期策略,等再多次没被认定为热点数据的时候再进行删除。该方法能很大程度上减少数据库压力,同时对热点数据与非热点数据很好的进行迭代。
2、根据业务需求合理搭配redis的过期删除策略和内存删除策略,保证过期的数据能够及时被清理
3、合理优化redis缓存热点数据策略能很大程度减少redis缓存压力,如redis负载依旧很大,则说明当前redis缓存以及到达项目吞吐量瓶颈,此时只能考虑搭建集群或者添加集群服务器来减缓缓存层面的压力
4、还可以叠加搭配布隆过滤器来做多重防御
5、当然,要是有准被时间的情况下,还是先对热点数据进行预热,提前加载到缓存中来的实在。
以上只是比较通用的解决思路,更多的还是要结合实际的业务场景和项目需求来进行优化处理
如果还有其它比较好的解决方案也欢迎评论留言,说出你的想法。