1. 程式人生 > 實用技巧 >vue六:vue基礎之列表渲染和key值設定

vue六:vue基礎之列表渲染和key值設定

技術標籤:Redis學習專欄redis過濾器

一、簡介

布隆過濾器是一種資料結構,是由一串很長的二進位制向量組成,可以將其看成一個二進位制陣列。既然是二進位制,那麼裡面存放的不是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。我們可以得到一個結論:布隆過濾器可以判斷某個資料一定不存在,但是無法判斷一定存在。
三、優缺點
  • 優點:優點很明顯,二進位制組成的陣列,佔用記憶體極少,並且插入和查詢速度都足夠快。
  • 缺點:隨著資料的增加,誤判率會增加;還有無法判斷資料一定存在;另外還有一個重要缺點,無法刪除資料(刪除時可能會誤刪,導致資料出現混亂)。
四、安裝
  1. 獲取布隆過濾器安裝包
[[email protected]
local]
# git clone git://github.com/RedisLabsModules/rebloom
  1. 安裝布隆過濾器
[[email protected] local]# cd rebloom
[[email protected] rebloom]# make
##安裝完成之後會出現redisbloom.so
[[email protected] rebloom]# ll
總用量 372
-rw-r--r--. 1 root root    211 119 11:08 changelog
-rw-r--r--. 1 root root    520 119
11:08 codecov.yml drwxr-xr-x. 2 root root 99 119 11:09 contrib -rw-r--r--. 1 root root 431 119 11:08 Dockerfile drwxr-xr-x. 3 root root 247 119 11:08 docs -rw-r--r--. 1 root root 5794 119 11:08 LICENSE -rw-r--r--. 1 root root 3310 119 11:08 Makefile -rw-r--r--. 1 root root 1067 119 11:08 mkdocs.yml drwxr-xr-x. 4 root root 34 119 11:08 opt -rw-r--r--. 1 root root 522 119 11:08 ramp.yml -rw-r--r--. 1 root root 4693 119 11:08 README.md -rwxr-xr-x. 1 root root 331416 119 11:09 redisbloom.so drwxr-xr-x. 2 root root 48 119 11:09 rmutil drwxr-xr-x. 2 root root 4096 119 11:09 src drwxr-xr-x. 3 root root 4096 119 11:08 tests [[email protected] rebloom]#
  1. 修改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