缓存穿透与雪崩

缓存穿透是指查询一个一定不存在的数据,如查询id=-1的数据信息,由于缓存不命中(cache miss),还要到数据库去查,但是数据库也查不到,这时给查询请求返回空,并且不会写数据到缓存中,这样,下次同样的请求还是会到数据库去查,大量这样的请求将给数据库造成极大的压力从而失去了缓存的意义。

解决方案有两个:

1.第一次在数据库中查不到数据时,在给请求返回空的同时,也把空对象写到缓存中,这样以后再查的时候就会直接从缓存返回空了。

2.在缓存前加一个布隆过滤器,把所有可能的键都放在里面,这样如果查询不存在的键时,就直接从布隆过滤器返回了,连缓存都不用查。

参考博客:http://carlosfu.iteye.com/blog/2248185

缓存雪崩是指缓存由于某种原因(可能是宕机)挂掉了,而导致所有的查询都去数据库查,很可能导致数据库也挂掉。

预防缓存雪崩的方案:

用redis集群保证缓存服务的高可用性,这样即使一个主redis挂掉,从redis会自动升为主redis。

参考博客:http://carlosfu.iteye.com/blog/2249316

原文地址:https://www.cnblogs.com/koushr/p/5873405.html