加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

详解Redis缓存击穿以及解决方案

发布时间:2018-11-12 22:02:24 所属栏目:业界 来源:智能运维小讲堂
导读:什么是缓存击穿 在谈论缓存击穿之前,我们先来回忆下从缓存中加载数据的逻辑,如下图所示: 因此,如果黑客每次故意查询一个在缓存内必然不存在的数据,导致每次请求都要去存储层去查询,这样缓存就失去了意义。如果在大流量下数据库可能挂掉。这就是缓存

接下来我们来看一下,误判率为0.03时,底层维护的bit数组的长度如下图所示:

详解Redis缓存击穿以及解决方案

将bloomfilter的构造方法改为:

  1. private static BloomFilter<Integer> bloomFilter = BloomFilter.create(Funnels.integerFunnel(), size,0.01); 

即,此时误判率为0.01。在这种情况下,底层维护的bit数组的长度如下图所示

详解Redis缓存击穿以及解决方案

由此可见,误判率越低,则底层维护的数组越长,占用空间越大。因此,误判率实际取值,根据服务器所能够承受的负载来决定,不是拍脑袋瞎想的。

(3) 实际使用

redis伪代码如下所示:

  1. String get(String key) { 
  2. String value = redis.get(key); 
  3. if (value == null) { 
  4. if(!bloomfilter.mightContain(key)){ 
  5. return null; 
  6. }else{ 
  7. value = db.get(key); 
  8. redis.set(key, value); 
  9. return value; 

优点

  • 思路简单
  • 保证一致性
  • 性能强

缺点

  • 代码复杂度增大
  • 需要另外维护一个集合来存放缓存的Key
  • 布隆过滤器不支持删值操作

【编辑推荐】

  1. B站数据库“脱裤”?如何让你的数据不“裸露”?
  2. 浅谈数据库防火墙技术及应用
  3. 数据库防火墙的阻断方式:行为阻断或者Session阻断?
  4. 数据库防火墙商业化的前提条件
  5. 如何应对服务器安全威胁?听听Sophos专家怎么说
【责任编辑:赵宁宁 TEL:(010)68476606】
点赞 0

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读