什么是缓存穿透
一般的缓存系统,都是根据key值去缓存查询,如果不存在对应的key值,就应该去数据库中查询。这个时候,如果请求的并发量很大,就会对后端的数据库系统造成很大的压力。这就叫缓存穿透。简单理解是:缓存value为空;并发量很大,对数据库造成很大压力。
造成原因
1.业务自身代码出现或者数据出现问题。
2.一些恶意攻击、爬虫造成大量空值,此时会对数据库造成很大压力。
解决办法
1.设置布隆过滤器,将所有可能存在的哈希key值放入到一个很大的bitmap中,一个哈希key在bitmap中不存在的就进行拦截,从而避免了对底层存储系统的查询压力。
2.在缓存中设置一个空值的key,过期时间要设置短一点,不超过5分钟。
雪崩
缓存在同一时间内key值大量失效,造成大量的请求瞬间都落在了数据库上导致连接异常。
解决办法
1.建立备份缓存,缓存A和缓存B,A设置超时时间,B不设值超时时间,先从A读缓存,A没有读B,并且更新A缓存和B缓存;
2.设置缓存超时时间的时候加上一个随机的时间长度,比如这个缓存key的超时时间是固定的5分钟加上随机的2分钟,酱紫可从一定程度上避免雪崩问题;
网友评论