redis缓存穿透问题

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

常见的解决办法:

缓存空对象:第一次请求发现redis和数据库中都不存在时,,可以设置请求数据为key,null为值,放置在缓存中.

但是会有一个问题,就是如果此类请求过多,会导致内存压力过大,解决办法:设置五分钟的过期时间,但是当我们后续对这个key赋值时,会导致短期的数据不一致问题.

优点:实现简单,维护方便.

缺点:额外的内存消耗,可能会导致数据短期的不一致问题

布隆过滤器:是在redis之前进行的操作,也就是说,请求发过来时,不先查看缓存,而是先查看布隆过滤器,如果布隆过滤器没有,直接拒绝,如果认为存在,才放行,但是数据不一定真的在redis或者数据库中存在

原理:是将数据库中的数据基于某一种哈希算法计算出他的哈希值,然后将哈希值转换为二进制位,将其存入到布隆过滤其中,让其做判断,只会拒绝一定不存在的数据

优点:内存占用较少,没有多余的key

缺点:实现复杂,存在误判的可能.

其他解决办法:

增强参数的复杂度,避免被猜测id规律;

做好数据的基础格式校验

加强用户权限校验,比如设置必须登录之后才能访问等等

做好热点参数的限流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值