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

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

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

首先,我们先不对误判率做显示的设置,进行一个测试,代码如下所示:

  1. package bloomfilter; 
  2. import java.util.ArrayList; 
  3. import java.util.List; 
  4. import com.google.common.hash.BloomFilter; 
  5. import com.google.common.hash.Funnels; 
  6. public class Test { 
  7. private static int size = 1000000; 
  8. private static BloomFilter<Integer> bloomFilter =BloomFilter.create(Funnels.integerFunnel(), size); 
  9. public static void main(String[] args) { 
  10. for (int i = 0; i < size; i++) { 
  11. bloomFilter.put(i); 
  12. List<Integer> list = new ArrayList<Integer>(1000); 
  13. //故意取10000个不在过滤器里的值,看看有多少个会被认为在过滤器里 
  14. for (int i = size + 10000; i < size + 20000; i++) { 
  15. if (bloomFilter.mightContain(i)) { 
  16. list.add(i); 
  17. System.out.println("误判的数量:" + list.size()); 

输出结果如下:

  1. 误判对数量:330 

如果上述代码所示,我们故意取10000个不在过滤器里的值,却还有330个被认为在过滤器里,这说明了误判率为0.03.即,在不做任何设置的情况下,默认的误判率为0.03。

下面上源码来证明:

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

(编辑:成都站长网)

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

热点阅读