目录
缓存穿透理解
1、首先出现缓存穿透的根本是因为应用服务器压力变大了:当客户端传来巨多请求时,首先先经过redis,看缓存中有没有结果,如果没有就会去数据库进行访问,然而这巨多请求绝大数在缓存中都没有(也就是redis命中率很低很低),所以压力直接给到数据库,导致服务器崩溃;
2、另外一种可能就是别人故意发送恶意请求(也就是那些非正常请求),当数量到达一定程度,一直访问数据库,最终服务器压力太大(疯狂执行数据库语句一直找不到一直查)从而导致崩溃,原理也和上述一样,redis中查询不到;
解决方案
还可以设置黑名单,将那些访问无效数据多次的用户加入黑名单,进行拦截;
缓存击穿
出现原因:
1、数据库压力瞬间增大
2、redis正常运行并且没有出现大量key过期
当redis某个key过期了(热门key),然后大量访问这个key——>触发缓存击穿
解决方案
2、实时调整:现场看那些热点key升高,我们就调整这个key的过期时长
3、使用锁,不过效率很低;
击穿和穿透的区别
击穿:是某些热频key过期了,然后就只能一直访问数据库,造成压力过大,服务器崩溃
穿透:大量无效访问,缓存中没有,一直访问数据库,导致压力过大,服务器崩溃
缓存雪崩
出现情况:
在极短时间内,大量key集中过期
解决方案
3、设置提前值,当到达提前值时,就告诉缓存要过期了,从而重新更新key的缓存
4、将key的缓存分散开——>从而导致不会一下子全部过期(可用随机值)