redis 安裝布隆過濾器外掛程式及PHP呼叫

2021-09-27 06:43:15 字數 1985 閱讀 5460

redis >= 4.0

手冊:一、linux下安裝redis的bloomfilter外掛程式

cd /usr/local

wget

tar -zxf v1.1.1.tar.gz

cd redisbloom-1.1.1

make

lspwd

給redis新增擴充套件

vi /usr/local/redis-4.0.14/redis.conf

##################### modules ####################

loadmodule /usr/local/redisbloom-1.1.1/rebloom.so initial_size 10000000 error_rate 0.0001

後台啟動

./src/redis-server redis.conf

或者./src/redis-server redis.conf --loadmodule /usr/local/redisbloom-1.1.1/rebloom.so initial_size 10000000 error_rate 0.0001

netstat -lntp

命令:

新建過濾器:

bf.reserve   

bf.reserve books 0.001 10000

error_rate指容錯率,取值範圍為(0,1),數值越小,占用記憶體越大,操作時占用cpu資源 越大。

size指過濾器的容量,新增的條目數超過此數字後,效能將開始下降。實際降級將取決 於超出限制的程度。隨著條目數呈指數增長,效能將呈線性下降。

如果不通過該命令來新建過濾器,bf.add新增值時會自動建立過濾器,但會使用預設的 容量與容錯率。

新增過濾器與值:

bf.add
如果過濾器不存在,則會自動建立,使用預設的容量100與容錯率0.01。遵循集合的特性,已存在的則新增失敗。

批量新增

bf.madd users user4 user5 user6 user7
檢查過濾器中是否存在值:

bf.exists
批量檢查

bf.mexists users user4 user5 user6 user7 user8
過濾器建立後容量和容錯率就無法改變了。

過濾器中的元素沒法刪掉。

客戶端

./src/redis-cli -p 6380

127.0.0.1:6380> bf.add users user1

(integer) 1

127.0.0.1:6380> bf.add users user1

(integer) 0

127.0.0.1:6380> bf.exists users user1

(integer) 1

127.0.0.1:6380> bf.exists users user2

(integer) 0

php-redis擴充套件中有個函式可以呼叫原始的redis指令:

$redis = new \redis();

$redis->connect('127.0.0.1', 6380);

$re = $redis->rawcommand('bf.add', 'users', 'user2');

var_dump($re);

新增:在向redis set值的之後,呼叫bf.add新增到過濾器。

檢查:在穿過了redis去到mysql之前,呼叫bf.exists檢查一下,如果不存在。

布隆過濾器可以用在查詢和寫入分開的業務模式下,乙個業務會把key寫入redis和bf,另乙個業務來搜尋查詢這個key。

如果get和set在同乙個地方就不能用bf啦。

Redis安裝布隆過濾器外掛程式

伺服器系統是centos的系統 這裡寫下如何給redis 安裝布隆過濾器 wget 解壓 tar zxvf v1.1.1.tar.gz cd rebloom 1.1.1 make 執行完成後 看rebloom 目錄結構 多了乙個 rebloom.so 的檔案 然後需要在 在redis配置檔案 red...

Redis布隆過濾器安裝

解壓檔案 unzip redisbloom master.zip 進入目錄 cd redisbloom master 執行命令 make 目錄下生成檔案 redisbloom.so 拷貝 cp redisbloom.so usr local redis bin redisbloom.so 1 在re...

Redis 布隆過濾器

實現原理 對的資料肯定是對的,錯的資料不能保證是對的。解釋如下 之前新增到容器中的資料,再次進行判斷是不是在這裡面,因為來過,槽位肯定我為1,所以判斷是不會出現問題的。容器中不存在,判斷是不是在容器中,可能其他的資料通過hash函式執行後把槽位占用了,所以存在一定的誤差。不能保證一定沒問題。hash...