一, 什么是缓存穿透, 如何预防?
缓存穿透是指缓存和数据库中都没有的数据, 而用户不断发起请求, 请求直接打在了数据库上.
对于缓存穿透的话一般来说只需要针对空值缓存就行, 过期时间设置 5-10 分钟, 这样就流量就不会打在数据库上导致死机宕机.
二, 什么是缓存击穿, 如何预防?
缓存击穿, 是指一个 key 非常热点, 在不停的扛着大并发, 大并发集中对这一个点进行访问, 当这个 key 在失效的瞬间, 持续的大并发就穿破缓存, 直接请求数据库, 就像在一个屏障上凿开了一个洞.
缓存击穿的话, 设置热点数据永远不过期. 或者加上互斥锁就能搞定了.
二, 什么是缓存雪崩, 如何预防?
缓存雪崩, 是指在某一个时间段, 缓存集中过期失效.
雪崩其实也可以做到提前预防, 那就是用到过期时间的 key, 时间全部错开, 此外, 有些数据可以做永久保存的话那就直接保存好了, 这样就不会造成大面积的 key 失效了.
1. 永不过期
比如某些热点数据可以设置永不过期.
2. 过期时间错开
处理缓存雪崩简单, 在批量往 Redis 存数据的时候, 把每个 Key 的失效时间都加个随机值就好了, 这样可以保证数据不会在同一时间大面积失效.
如果 Redis 是集群部署, 将热点数据均匀分布在不同的 Redis 库中也能避免全部失效的问题.
setRedis(Key,value,time + Math.random() * 10000)
3. 多缓存结合
Redis 结合 ehcache 或者 Memcached, 先查 Redis 再查 Memcached.
来源: http://www.bubuko.com/infodetail-3377221.html