【Redis 开发】缓存穿透解决

缓存穿透

缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存就永远不会生效,这些请求都会打到数据库

常见的解决方案有两种:
缓存空对象布隆过滤

缓存空对象

当数据库中查询无果的时候,我们在对应的缓存中写入一个null,在下一次访问的时候就不会到达数据库,由缓存返回一个null

缺点:
额外的内存消耗 (可以为key设置定时有效缓解)
可能造成短期的不一致 (我在数据库插入一条数据,但是对应的缓存中存的是null)

布隆过滤

是一种算法,在客户端与Redis端之间加入了一层布隆过滤器
在这里插入图片描述
首先通过布隆过滤器,如果没有数据就拒绝访问,底层时间通过数据库中的数据通过哈希算法算出哈希值存到布隆过滤器中

优点:内存占用少,没有多余的key
缺点:实现复杂,存在误判可能

缓存空对象实现

在服务层判断数据库的时候加入缓存空对象方面的技术

//user是数据库返回的数据
if(user==null)
{
    StringRedisTemplate.opsForValue().set(key, " ",10,TimeUnit.MINUTES)
    
}

这样下一次查询的时候就会有效缓解缓存穿透的问题

其他缓解方式

  1. 增强id的复杂度
  2. 提高对数据的基本校验
  3. 加强用户权限校验
  4. 做好热点参数的限流
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值