当前位置:网站首页>Cache penetration and bloom filter
Cache penetration and bloom filter
2022-07-03 12:50:00 【Mcc_ mingchao】
What is cache penetration ?
Cache penetration is simply A lot of Requested key It doesn't exist in the cache at all , Causes the request to go directly to the database , There's no caching at all . for instance : Some hacker deliberately creates something that doesn't exist in our cache key Make a lot of requests , Causes a large number of requests to fall to the database .
We usually use bloom filter to solve cache penetration , Store the values of all possible requests in the bloom filter , When the user requests to come , First judge whether the value of the request from the user exists in the bloom filter . If it doesn't exist , Directly return the request parameter error information to the client , If there is one, the following process will be followed .
( Add bloom filter )
- You can actually think of it as a binary vector ( Or bit array ) And a series of random mapping functions ( hash function ) Two part data structure .
- Its advantage is that the spatial efficiency and query time are much better than the general algorithm , The disadvantage is that it has certain error recognition rate and deletion difficulty .
As shown in the figure , When adding elements to the bloom filter , This element first generates different hash values by multiple hash functions , Then the elements in the following table of the corresponding digit group are set to 1( When the bit array is initialized , All positions are 0). When the same string is stored the second time , Because the previous corresponding position has been set to 1, So it's easy to know that this value already exists .
If we need to judge whether an element is in the bloom filter , Just do the same hash again for the given string , After getting the value, judge the Every element Is it all for 1, If the value is 1, So this value is in the bloom filter , If there is a value that is not 1, Indicates that the element is not in the bloom filter .
Different strings may be hashed out in the same place , In this case, we can increase the number group size or adjust our hash function .
therefore , The bloom filter says that an element exists , A small probability will miscalculate ,( Like in the picture d, Although the positions obtained by three hash functions are 1, When they are all put in by different elements before ) The bloom filter says that an element is not there , Then this element must not be in .
The following is a very simple analog bloom filter I wrote , For the convenience of understanding , I acquiesce key It's all numbers , But in reality, more often than not, strings
import java.util.HashSet; import java.util.Random; import java.util.Scanner; import java.util.Set; public class Bloom { static public int hash1(int x){ return x%7; } static public int hash2(int x){ return x%17; } static public int hash3(int x){ return x%27; } public static void main(String[] args) { boolean arr[]=new boolean[27]; Set set=new HashSet(); for(int i=0;i<5;i++){ Random random=new Random(); int r=random.nextInt(100); System.out.println("redis contain "+r); set.add(r); arr[hash1(r)]=true; arr[hash2(r)]=true; arr[hash3(r)]=true; } int x=0; System.out.println(" Enter the number to search "); Scanner sc=new Scanner(System.in); x=sc.nextInt(); if (arr[hash1(x)] == true &&arr[hash2(x)] == true&&arr[hash3(x)] == true){ if(set.contains(x)){ System.out.println(" eureka ");; } else{ System.out.println(" misjudged "); set.remove(x); } } else{ System.out.println("redis Does not exist in "); } } }
The effect is as shown in the picture
边栏推荐
- Everything comes to him who waits
- 剑指Offer05. 替换空格
- 【习题六】【数据库原理】
- [embedded] - Introduction to four memory areas
- Idea packages the web project into a war package and deploys it to the server to run
- [problem exploration and solution of one or more filters or listeners failing to start]
- 剑指Offer04. 二维数组中的查找【中等】
- GCN thinking - word2vec directly calculates text classification
- The latest version of blind box mall thinkphp+uniapp
- 【习题七】【数据库原理】
猜你喜欢
initial、inherit、unset、revert和all的区别
Cloud Computing future - native Cloud
Attack and defense world mobile--ph0en1x-100
剑指Offer04. 二维数组中的查找【中等】
最新版盲盒商城thinkphp+uniapp
Xctf mobile--app2 problem solving
Alibaba is bigger than sending SMS (user microservice - message microservice)
2021 autumn Information Security Experiment 1 (password and hiding technology)
剑指Offer10- I. 斐波那契数列
Record your vulnhub breakthrough record
随机推荐
JVM memory model
02_ Lock the code, and don't let the "lock" become a worry
自抗扰控制器七-二阶 LADRC-PLL 结构设计
The latest version of blind box mall thinkphp+uniapp
Nodejs+express+mysql realizes login function (including verification code)
Quickly learn member inner classes and local inner classes
Enter the length of three sides of the triangle through the user, and calculate the area of the triangle, where the length is a real number
Implement verification code verification
Cloud Computing future - native Cloud
RedHat5 安装Socket5代理服务器
Eureka自我保护
Flinksql can directly create tables and read MySQL or Kafka data on the client side, but how can it automatically flow and calculate?
Apache Mina Development Manual
Tianyi ty1208-z brush machine detailed tutorial (free to remove)
studio All flavors must now belong to a named flavor dimension. Learn more
Use bloc to build a page instance of shutter
GCN thinking - word2vec directly calculates text classification
(latest version) WiFi distribution multi format + installation framework
With pictures and texts, summarize the basic review of C language in detail, so that all kinds of knowledge points are clear at a glance?
并网-低电压穿越与孤岛并存分析