当前位置:网站首页>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
边栏推荐
- Swift5.7 extend some to generic parameters
- 【计网】第三章 数据链路层(2)流量控制与可靠传输、停止等待协议、后退N帧协议(GBN)、选择重传协议(SR)
- [ArcGIS user defined script tool] vector file generates expanded rectangular face elements
- Kotlin notes - popular knowledge points asterisk (*)
- Glide 4.6.1 API initial
- Harmonic current detection based on synchronous coordinate transformation
- Drop down refresh conflicts with recyclerview sliding (swiperefreshlayout conflicts with recyclerview sliding)
- 雲計算未來 — 雲原生
- 社交社区论坛APP超高颜值UI界面
- (latest version) WiFi distribution multi format + installation framework
猜你喜欢

社交社区论坛APP超高颜值UI界面

(latest version) WiFi distribution multi format + installation framework
![[review questions of database principles]](/img/c3/81d192a40bcc4f5d72fcbe76c708bb.png)
[review questions of database principles]

Xctf mobile--app2 problem solving

4. Wireless in vivo nano network: electromagnetic propagation model and key points of sensor deployment

Xctf mobile--rememberother problem solving

记录自己vulnhub闯关记录

Sword finger offer07 Rebuild binary tree

initial、inherit、unset、revert和all的区别

studio All flavors must now belong to a named flavor dimension. Learn more
随机推荐
Nodejs+express+mysql realizes login function (including verification code)
Sword finger offer10- I. Fibonacci sequence
Drop down refresh conflicts with recyclerview sliding (swiperefreshlayout conflicts with recyclerview sliding)
并网-低电压穿越与孤岛并存分析
Tianyi ty1208-z brush machine detailed tutorial (free to remove)
剑指Offer10- I. 斐波那契数列
[comprehensive question] [Database Principle]
The future of cloud computing cloud native
Export the entire Oracle Database
Ali & ant self developed IDE
initial、inherit、unset、revert和all的区别
Glide question you cannot start a load for a destroyed activity
OpenStack节点地址改变
Write a simple nodejs script
剑指Offer04. 二维数组中的查找【中等】
低代码平台国际化多语言(i18n)技术方案
写一个简单的nodejs脚本
What is more elegant for flutter to log out and confirm again?
Sword finger offer09 Implementing queues with two stacks
The best shortcut is no shortcut
