为什么用缓存 我们可以这样理解,所有的缓存都是内存数据库,而我们常用的oracle和mysql等关系型数据库都是硬盘数据库,两者最大的区别就是,内存数据库io速度远大于关系数据库的磁盘io,所以查询性能比较好...一种极端的情况下,可以对这些接口做恶意非法请求,导致大部分连接不可用,拖垮数据库
解决方案
针对缓存穿透,有很多解决方案,最常用的就是一下两种:
1)缓存为null的查询结果,将null...= obj) {//②查询结果不为空有两种情况,1)存储的空标识,2)真实数据
if("##".equals(obj.toString())) {//如果返回结果为##(为空的特殊标识),避免缓存穿透,...= obj)有两种情况,一种是缓存中存在真实有效数据,另一种就是存储的是标识null值的特殊字符,如下代码需要优先判断是否是特殊标识,如果是直接返回null值给调用方,如果不是特殊字符才转换为有效数据(...否则我们的表结构就一览无余的暴露给调用方了,在调用方非自己项目组或者非本公司的时候是非常不安全的)
- 第二个标红处将有效数据放入缓存(捕获异常)
- 最后返回有效数据
单元测试验证结果
@Test
public