vue六:vue基礎之列表渲染和key值設定
阿新 • • 發佈:2021-01-20
一、簡介
布隆過濾器是一種資料結構,是由一串很長的二進位制向量組成,可以將其看成一個二進位制陣列。既然是二進位制,那麼裡面存放的不是0,就是1,但是初始預設值都是0。
如下圖所示:
二、hash碰撞(誤差問題)
例如:要向布隆過濾器中新增一個元素key時,我們通過多個hash函式,算出一個值,然後將這個值所在的方格置為1。
比如:
- hash1(zero)=2,那麼在上圖第3個格將0變為1(陣列是從0開始計數的)
- hash2(lily)=6,那麼將第7個格置位1,依次類推。
新來一個數據,我們如何判斷其是否存在於這個布隆過濾器中呢?
- 很簡單,我們只需要將這個新的資料通過上面自定義的幾個雜湊函式,分別算出各個值,然後看其對應的地方是否都是1,如果存在一個不是1的情況,那麼我們可以說,該新資料一定不存在於這個布隆過濾器中。
- 反過來說,如果通過雜湊函式算出來的值,對應的地方都是1,那麼我們能夠肯定的得出:這個資料一定存在於這個布隆過濾器中嗎?答案是否定的,因為多個不同的資料通過hash函式算出來的結果是會有重複的,所以會存在某個位置是別的資料通過hash函式置為的1。我們可以得到一個結論:布隆過濾器可以判斷某個資料一定不存在,但是無法判斷一定存在。
三、優缺點
- 優點:優點很明顯,二進位制組成的陣列,佔用記憶體極少,並且插入和查詢速度都足夠快。
- 缺點:隨著資料的增加,誤判率會增加;還有無法判斷資料一定存在;另外還有一個重要缺點,無法刪除資料(刪除時可能會誤刪,導致資料出現混亂)。
四、安裝
- 獲取布隆過濾器安裝包
[[email protected] local]# git clone git://github.com/RedisLabsModules/rebloom
- 安裝布隆過濾器
[[email protected] local]# cd rebloom
[[email protected] rebloom]# make
##安裝完成之後會出現redisbloom.so
[[email protected] rebloom]# ll
總用量 372
-rw-r--r--. 1 root root 211 1月 19 11:08 changelog
-rw-r--r--. 1 root root 520 1月 19 11:08 codecov.yml
drwxr-xr-x. 2 root root 99 1月 19 11:09 contrib
-rw-r--r--. 1 root root 431 1月 19 11:08 Dockerfile
drwxr-xr-x. 3 root root 247 1月 19 11:08 docs
-rw-r--r--. 1 root root 5794 1月 19 11:08 LICENSE
-rw-r--r--. 1 root root 3310 1月 19 11:08 Makefile
-rw-r--r--. 1 root root 1067 1月 19 11:08 mkdocs.yml
drwxr-xr-x. 4 root root 34 1月 19 11:08 opt
-rw-r--r--. 1 root root 522 1月 19 11:08 ramp.yml
-rw-r--r--. 1 root root 4693 1月 19 11:08 README.md
-rwxr-xr-x. 1 root root 331416 1月 19 11:09 redisbloom.so
drwxr-xr-x. 2 root root 48 1月 19 11:09 rmutil
drwxr-xr-x. 2 root root 4096 1月 19 11:09 src
drwxr-xr-x. 3 root root 4096 1月 19 11:08 tests
[[email protected] rebloom]#
- 修改redis配置檔案
##在redis.comf檔案中增加
loadmodule /usr/local/rebloom/redisbloom.so
完成之後重啟redis即可。
關於布隆過濾器的命令:
(1)BF.ADD bloom redis #新增資料
(2)BF.EXISTS bloom redis #判斷資料
127.0.0.1:6379> BF.ADD bloom redis
(integer) 1
127.0.0.1:6379> BF.EXISTS bloom redis #存在返回 1
(integer) 1
127.0.0.1:6379> BF.EXISTS bloom redis1 #不存在返回0
(integer) 0