当前位置:网站首页>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
边栏推荐
- idea将web项目打包成war包并部署到服务器上运行
- Dix règles de travail
- [embedded] - Introduction to four memory areas
- initial、inherit、unset、revert和all的区别
- alright alright alright
- (最新版) Wifi分销多开版+安装框架
- 十條職場規則
- 4. Wireless in vivo nano network: electromagnetic propagation model and key points of sensor deployment
- Application of ncnn neural network computing framework in orange school orangepi 3 lts development board
- Openstack node address change
猜你喜欢
【数据挖掘复习题】
Eureka self protection
Ali & ant self developed IDE
阿里 & 蚂蚁自研 IDE
Xctf mobile--rememberother problem solving
Quick learning 1.8 front and rear interfaces
Integer case study of packaging
Sword finger offer09 Implementing queues with two stacks
Use bloc to build a page instance of shutter
Swift bit operation exercise
随机推荐
Is it OK to open an account for online stock speculation? Is the fund safe?
Kotlin notes - popular knowledge points asterisk (*)
[download attached] password acquisition tool lazagne installation and use
Use bloc to build a page instance of shutter
启用MemCached的SASL认证
Swift5.7 扩展 some 到泛型参数
I'm too lazy to write more than one character
[review questions of database principles]
Record your vulnhub breakthrough record
What is more elegant for flutter to log out and confirm again?
The latest version of blind box mall thinkphp+uniapp
Apache Mina开发手册
alright alright alright
TOGAF认证自学宝典V2.0
Sword finger offer05 Replace spaces
The difference between lambda and anonymous inner class
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?
(latest version) WiFi distribution multi format + installation framework
4. 无线体内纳米网:电磁传播模型和传感器部署要点
Project video based on Linu development