博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis缓存的穿透
阅读量:3984 次
发布时间:2019-05-24

本文共 625 字,大约阅读时间需要 2 分钟。

一、缓存穿透的出现

缓存穿透的意思就是缓存永远无法拦截这个请求,而让它去了数据库。当一个查询的key不存在redis,去数据库查也没有,这样也就没法做缓存,这样当要查这个key时,就永远会去到数据库了,如果此时并发很高,那么数据库就很危险了,这叫缓存穿透。缓存穿透一般是恶意的并发请求。

二、缓存穿透的预防

1、去到数据库之前先设置zookeeper分布式锁,类似于缓存击穿的处理。
参考:https://blog.csdn.net/raoxiaoya/article/details/101011508

2、使用布隆过滤器

原理是,穿过redis去数据库之前先检查一下要查找的key是否在布隆过滤器里面,如果不存在则说明本身就是不存在的,去了数据库也是查不到,那么有可能是恶意的请求,直接返回。当然布隆过滤器里面存放的是全部的key,它实际上是一个集合,缺点是有一定误判率的,优点是它内部的算法无伦在时间上还是在空间上都是表现不错的。
关于布隆过滤器原理及其实现:
https://blog.csdn.net/raoxiaoya/article/details/101026919
https://blog.csdn.net/raoxiaoya/article/details/101018840

3、接口限流与熔断、降级

重要的接口一定要做好限流策略,防止用户恶意刷接口,同时要降级准备,当接口中的某些服务不可用时候,进行熔断,失败快速返回机制。

你可能感兴趣的文章
Thinking in java(八)-正则表达式
查看>>
DB2 SQL7008问题
查看>>
高性能JSON框架之FastJson的简单使用
查看>>
SQL中使用正则的一个栗子
查看>>
SQL语句与正则表达式
查看>>
ResourceBundle来读取配置文件及路径问题
查看>>
ibatis 与 sql 的问题
查看>>
onclick="return checkForm()" 、onclick="checkForm();return false;"解析 与 return false;
查看>>
List去重与equals/hashcode
查看>>
Websphere 学习(一)
查看>>
No enclosing instance of type XXX is accessible.
查看>>
Websphere 学习(二)
查看>>
Websphere 学习笔记(三)
查看>>
启动第二个eclipse报错
查看>>
修改jar源码
查看>>
Webshpere中数据库连接池中的连接没有正常释放
查看>>
quartz笔记(1)
查看>>
排序算法(1)-冒泡排序,选择排序,插入排序,希尔排序,快速排序
查看>>
[书]java8函数式编程(1)
查看>>
Junit initializationerror错误
查看>>