当前位置:网站首页>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
边栏推荐
- Sword finger offer09 Implementing queues with two stacks
- Oh my Zsh + TMUX installation
- Low code platform international multilingual (I18N) technical solution
- [exercise 7] [Database Principle]
- Do you feel like you've learned something and forgotten it?
- Recovery of website address and method of Amazon account login two-step verification failure caused by mobile phone number becoming empty
- 【计网】第三章 数据链路层(2)流量控制与可靠传输、停止等待协议、后退N帧协议(GBN)、选择重传协议(SR)
- Drop down refresh conflicts with recyclerview sliding (swiperefreshlayout conflicts with recyclerview sliding)
- Enable SASL authentication for memcached
- Implement verification code verification
猜你喜欢

Xctf mobile--app1 problem solving

【综合题】【数据库原理】

剑指Offer07. 重建二叉树

What is more elegant for flutter to log out and confirm again?

Powerful avatar making artifact wechat applet

【数据库原理复习题】

Summary of error prone knowledge points: Calculation of define s (x) 3*x*x+1.

Sword finger offer09 Implementing queues with two stacks

Sword finger offer07 Rebuild binary tree

Detailed explanation of the most complete constraintlayout in history
随机推荐
Project video based on Linu development
Apache Mina Development Manual
Write a simple nodejs script
阿里 & 蚂蚁自研 IDE
Togaf certification self-study classic v2.0
[judgment question] [short answer question] [Database Principle]
OpenStack节点地址改变
Node. Js: use of express + MySQL
【综合题】【数据库原理】
elastic_ L01_ summary
十條職場規則
GCN thinking - word2vec directly calculates text classification
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
Ali & ant self developed IDE
4. 无线体内纳米网:电磁传播模型和传感器部署要点
Drop down refresh conflicts with recyclerview sliding (swiperefreshlayout conflicts with recyclerview sliding)
剑指Offer09. 用两个栈实现队列
Flinksql can directly create tables and read MySQL or Kafka data on the client side, but how can it automatically flow and calculate?
Swift5.7 扩展 some 到泛型参数
The latest version of lottery blind box operation version
