mysql的雪崩穿透_Redis——吊打面试官之缓存击穿、穿透、雪崩以及redis与数据库数据一致性问题...

前言

redis的读写速率非常之快,所以在实际使用中,redis经常用来存储缓存,减轻数据库的负担。在面试中被问的最多的缓存相关的问题也就是以上几个:

缓存穿透

缓存击穿

缓存雪崩

与数据库数据一致性问题

前三个其实已经是烂大街的问题了,第四个还算是有点水准的问题,也是值得深究的一个问题。

容我一个个慢慢道来,看完此文以后面试遇到这几个问题,必当横着走。

缓存穿透、击穿、雪崩

缓存穿透

什么是缓存穿透?

缓存穿透就是请求直接穿过了缓存,缓存没有了存在的意思:请求所查询的数据在数据库中并没有存在,那么正常情况下缓存中肯定也没有该数据。这就导致每次请求都会打到数据库上,数据库负担较大,遇到大量恶意的请求甚至会致使数据库宕机。

比如某个数据表的id是long类型,数据库中存储的id都是正整数。此时某个请求查询的数据 id = -1,数据库中必然没有此id的数据。

如何解决?

其实搞清楚缓存穿透的由来,就可以对症下药来解决:

过滤非法请求非法参数,如上所提的例子,参数明显是不合法的,可以先过滤,减少后端的负担。

设置value为null的缓存。比如查询一个 id = 13802881111 的数据,此请和id是合法的,但是数据库中并没有此数据。此时可以在redis中set一个key: id = 13802881111,value为null的缓存。下次该请求进来则可以直接在redis读取到该数据为null。需注意设置合理的缓存失效时间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值