击透, 击穿, 雪崩都在redis找不到
击透是redis没起作用,
击穿是单个key(热点key)发生高并发 导致数据库崩溃,
雪崩是多个key发生高并发导致数据库崩溃
redis击透:
redis缓存和数据库都不存在这个key时, redis就没起作用了, 这就叫击透
解决办法:
先从redis获取, 没获取到, 就从数据库获取, 在数据库也没有获取到时,
可以把这个key存储在redis, 他的value可以是字符串"没有这个数据",
下次用户又来请求这个key, 就会从redis获取了
(不过要是后面数据库又有了这个key的话, 查出来的结果就不对了, 所以还是要每隔一段时间去查一下数据库, 然后更新这个key的value)
redis击穿:
redis对于那些hot key, 也就是热点key, 他可能有段时间突然失效了, 这时请求量很多(热点key嘛), 大量请求访问数据库, 数据库可能就崩了
解决办法:
对于热点key, 同一时间访问这个key的请求很多,
要是在redis获取不到, 就加一个锁,
锁里面在加一个判断, 从redis获取看有没有这个key, 有就直接返回,没有就从数据库获取
这样的话,
第一个线程进入锁逻辑, 发现redis没有, 就会从数据库获取, 然后把这个key存储在redis,
第二个线程进来时, 进入判断逻辑发现redis里面已经有这个key了,就会从redis获取, 这样的话访问数据库的次数会少很多, 性能比较好