什么是缓存穿透(查不到)?
缓存穿透,当用户请求我们数据时我们可以直接从缓存里面取出来给他,如果缓存取不到数据我们直接去数据库读取数据,如果这个出现并发访问,而且我们缓存也没有数据,他就会跳过我们的持久层进入到我们的JDBC,给数据库造成巨大压力或者宕机,这个过程就叫缓存穿透。
解决方案 :
1、我们可以给我们的缓存存入一个空值,避免直接对底层数据造成的压力。
2、可以使用布隆过滤器,布隆过滤器是一种数据结构,对所有查询的参数已hash的方式存储,在控制层进行校验,不符合的则丢弃,从而避免了对底层存储系统的压力。
缓存击穿(量太大、缓存过期)?
指我们redis中某一个key非常热门,比如是抢购商品、热门事件存储.....,导致大量用户同时访问那一个key,比如我们服务器key设置的是60秒过期,60.01秒恢复,那么这0.1秒的时间将会有大量请求到我们的数据库,从而造成我们的缓存击穿。
解决方案 :
1、我们可以在业务方面想办法控制我们的一些热点key不过期。
2、可以使用线程加锁,只允许一个线程去数据库请求数据,其他线程等待,当数据请求出来以后将数据重新存入我们的redis,其他等待线程全部返回第一个线程请求出来的数据。
什么是缓存雪崩?
其中某一个时间所有缓存集体失效,比如缓存服务器节点宕机或断网,如果遇到数据量大的情况那将会把压力全部集中到我们的数据库。导致系统瞬间压垮。这往往是最致命的。在雪崩面前没有一片雪花是无辜的。
1135

被折叠的 条评论
为什么被折叠?



