响应式电影资讯网站,淡蓝色网站,网站改版 收录,怎样在百度上作网站推广缓存穿透
一般的缓存系统#xff0c;都是按照key去缓存查询#xff0c;如果不存在对应的value#xff0c;就去后端系统查找#xff08;比如DB#xff09;。
一些恶意的请求会故意查询不存在的key,请求量很大#xff0c;就会对后端系统造成很大的压力。这就叫做缓存穿透…缓存穿透
一般的缓存系统都是按照key去缓存查询如果不存在对应的value就去后端系统查找比如DB。
一些恶意的请求会故意查询不存在的key,请求量很大就会对后端系统造成很大的压力。这就叫做缓存穿透。 如何避免
1对查询结果为空的情况也进行缓存这样再次访问时缓存层会直接返回空值。缓存时间设置短一点或者该key对应的数据insert了之后清理缓存。
2对一定不存在的key进行过滤。具体请看布隆过滤器
缓存击穿
是针对缓存中没有但数据库有的数据。
场景是当Key失效后假如瞬间突然涌入大量的请求来请求同一个Key这些请求不会命中Redis都会请求到DB导致数据库压力过大甚至扛不住挂掉。
解决办法
1、设置热点Key自动检测热点Key将热点Key的过期时间加大或者设置为永不过期或者设置为逻辑上永不过期
2、加互斥锁。当发现没有命中Redis去查数据库的时候在执行更新缓存的操作上加锁当一个线程访问时其它线程等待这个线程访问过后缓存中的数据会被重建这样其他线程就可以从缓存中取值。
缓存雪崩
是指大量Key同时失效对这些Key的请求又会打到DB上同样会导致数据库压力过大甚至挂掉。
解决办法
1让Key的失效时间分散开可以在统一的失效时间上再加一个随机值或者使用更高级的算法分散失效时间。
2构建多个redis实例个别节点挂了还有别的可以用。
3多级缓存比如增加本地缓存减小redis压力。
4对存储层增加限流措施当请求超出限制提供降级服务一般就是返回错误即可