redis 缓存穿透问题分析

缓存击穿问题

缓存击穿表好恶意用户模式请求很多缓存中不存在的数据,由于缓存中都没有,导致这些请求短时间内直接落在了数据库上,导致数据库异常。这个我们在实际项目就遇到了,有些抢购活动,秒杀活动的接口API被大量恶意用户刷,导致短时间内数据库超时了,好在数据库是读写分离,同时也有进行接口限流,hold住了。

1.使用互斥锁排队

业界比价普遍的一种做法,即根据key获取value值为空时,锁上,从数据库中load数据后再释放锁。若其它线程获取锁失败,则等待一段时间后重试。这里要注意,分布式环境中要使用分布式锁,单机的话用普通的锁(synchronized、Lock)就够了

这样做思路比较清晰,也从一定程度上减轻数据库压力,但是锁机制使得逻辑的复杂度增加,吞吐量也降低了,有点治标不治本。

2.接口限流与熔断、降级

重要的接口一定要做好限流策略,防止用户恶意刷接口,同时要降级准备,当接口中的某些服务不可用时候,进行熔断,失败快速返回机制。

3.布隆过滤器   

posted @ 2019-04-13 10:49  Ocean乌龟  阅读(128)  评论(0编辑  收藏  举报