看看redis中那些好玩的module (sql on redis, bf/cf on redis)

来源:https://www.cnblogs.com/huangxincheng/archive/2019/01/19/10292303.html
-Advertisement-
Play Games

自從redis加入了module功能之後,redis的生態就很有意思了,每個領域的大佬都會以插件的形式給redis擴展一些新的功能,比如本篇說到的rediSQL,rebloom。 一:rediSQL 1. 背景 redis雖然是牛逼,但還是有很多人吐槽redis操作性太弱,比如你想要在redis上實 ...


  

  自從redis加入了module功能之後,redis的生態就很有意思了,每個領域的大佬都會以插件的形式給redis擴展一些新的功能,比如本篇說到的rediSQL,rebloom。

 

一:rediSQL

  1. 背景

        redis雖然是牛逼,但還是有很多人吐槽redis操作性太弱,比如你想要在redis上實現一個比較複雜的業務邏輯,可能對你來說是一個災難,有些同學會說用redis的

存儲過程lua撒,但是lua不是每個程式員都會的,更何況那些數據分析師,但要是問sql會不會,基本上合格的程式員和分析師在這個上面都是沒毛病的,真的要是讓sql

落在redis上,那真是如虎添翼,可能最早讓sql落到redis上的,應該是spark sql 吧,讓redis作為spark的rdd,但這裡說到的是另外一個通過module實現的sql on redis。

 

  2. 下載

     源代碼可以到 github:https://github.com/RedBeardLab/rediSQL  ,下載地址是:https://github.com/RedBeardLab/rediSQL/releases    

直接下載這個編譯好的文件,拿來就用就好了。

 

3. 載入

    這個簡單,先把rediSQL_0.7.1.so 導入到centos中,然後只需使用module load  rediSQL_0.7.1.so 返回ok即可。

1 [root@localhost redis]# ls
2 00-RELEASENOTES  COPYING   Makefile   README.md        redis.conf        runtest           src
3 appendonly.aof   deps      MANIFESTO  redis-check-aof  rediSQL_0.7.1.so  runtest-cluster   tests
4 BUGS             dump.rdb  module     redis-check-rdb  redis-server      runtest-sentinel  utils
5 CONTRIBUTING     INSTALL   mydata     redis-cli        redis-trib.rb     sentinel.conf

 

[root@localhost redis]# ./redis-cli
127.0.0.1:6379> module load /data/redis/rediSQL_0.7.1.so
OK

 

4. 簡單使用

    既然要讓sql落到redis中,那就先得建庫建表啦,這裡database:Datamip, table:customer,然後做了一個簡單的查詢,如下:

127.0.0.1:6379> REDISQL.CREATE_DB Datamip
OK
127.0.0.1:6379> REDISQL.EXEC Datamip "CREATE TABLE customer(id int, username varchar(10));"
1) DONE
2) (integer) 0
127.0.0.1:6379> REDISQL.EXEC Datamip "INSERT INTO customer VALUES(1, 'jack');"
1) DONE
2) (integer) 1
127.0.0.1:6379> REDISQL.EXEC Datamip "INSERT INTO customer VALUES(2, 'mary');"
1) DONE
2) (integer) 1
127.0.0.1:6379> REDISQL.EXEC Datamip "SELECT * FROM customer WHERE id=2"
1) 1) (integer) 2
   2) "mary"
127.0.0.1:6379> 

 

   是不是很爽的感覺,不過作者也是要吃飯的,所以企業版還是要收點壓箱底的錢。

 

二: rebloom

1. 背景

  這個module也很有意思,它給redis新增了兩種過濾器,一個叫做bloom filter,一個叫做 cuckoo filter, bloomfilter 估計大家都知道,用極小的錯誤率換取

原有的HashSet的1/8 -1/4的空間利用率,具體場景大家看著用吧,cuckoofilter 翻譯過來就是布穀鳥過濾性,可能作者家就是養鳥的,不然怎麼那麼多鳥呢,

大家只要理解cuckoofilter比bloomfilter更省空間,更低的錯誤率,而且還是支持刪除。

具體的大家可以看論文:http://www.cs.cmu.edu/~binfan/papers/conext14_cuckoofilter.pdf 。

 

2. 下載

    github地址:https://github.com/RedisLabsModules/rebloom   然後找到release模式,下載完之後需要自己make一下。

[root@localhost module]# ls
v1.1.0.tar.gz
[root@localhost module]# tar -xzvf v1.1.0.tar.gz
rebloom-1.1.0/
rebloom-1.1.0/.circleci/
rebloom-1.1.0/.circleci/config.yml
rebloom-1.1.0/.clang-format
rebloom-1.1.0/.gitignore
rebloom-1.1.0/Dockerfile
rebloom-1.1.0/LICENSE
rebloom-1.1.0/Makefile
rebloom-1.1.0/README.md
rebloom-1.1.0/contrib/
rebloom-1.1.0/contrib/MurmurHash2.c
rebloom-1.1.0/contrib/bloom.c
rebloom-1.1.0/contrib/bloom.h
rebloom-1.1.0/contrib/murmurhash2.h
rebloom-1.1.0/docs/
rebloom-1.1.0/docs/Bloom_Commands.md
rebloom-1.1.0/docs/CNAME
rebloom-1.1.0/docs/Cuckoo_Commands.md
rebloom-1.1.0/docs/Java_Client.md
rebloom-1.1.0/docs/Quick_Start.md
rebloom-1.1.0/docs/_config.yml
rebloom-1.1.0/docs/index.md
rebloom-1.1.0/mkdocs.yml
rebloom-1.1.0/ramp.yml
rebloom-1.1.0/src/
rebloom-1.1.0/src/cf.c
rebloom-1.1.0/src/cf.h
rebloom-1.1.0/src/cuckoo.c
rebloom-1.1.0/src/cuckoo.h
rebloom-1.1.0/src/print_version.c
rebloom-1.1.0/src/rebloom.c
rebloom-1.1.0/src/redismodule.h
rebloom-1.1.0/src/sb.c
rebloom-1.1.0/src/sb.h
rebloom-1.1.0/src/version.h
rebloom-1.1.0/tests/
rebloom-1.1.0/tests/Makefile
rebloom-1.1.0/tests/cuckoo.py
rebloom-1.1.0/tests/pytests.py
rebloom-1.1.0/tests/test-basic.c
rebloom-1.1.0/tests/test-cuckoo.c
rebloom-1.1.0/tests/test-perf.c
rebloom-1.1.0/tests/test.h
[root@localhost module]# ls
rebloom-1.1.0  v1.1.0.tar.gz
[root@localhost module]# cd rebloom-1.1.0
[root@localhost rebloom-1.1.0]# ls
contrib  Dockerfile  docs  LICENSE  Makefile  mkdocs.yml  ramp.yml  README.md  src  tests
[root@localhost rebloom-1.1.0]# make
cc  -Wall -Wno-unused-function -g -ggdb -O2 -fPIC -std=gnu99 -D_GNU_SOURCE -I/data/redis/module/rebloom-1.1.0 -I/data/redis/module/rebloom-1.1.0/contrib  -c -o /data/redis/module/rebloom-1.1.0/src/rebloom.o /data/redis/module/rebloom-1.1.0/src/rebloom.c
cc  -Wall -Wno-unused-function -g -ggdb -O2 -fPIC -std=gnu99 -D_GNU_SOURCE -I/data/redis/module/rebloom-1.1.0 -I/data/redis/module/rebloom-1.1.0/contrib  -c -o /data/redis/module/rebloom-1.1.0/contrib/MurmurHash2.o /data/redis/module/rebloom-1.1.0/contrib/MurmurHash2.c
cc  -Wall -Wno-unused-function -g -ggdb -O2 -fPIC -std=gnu99 -D_GNU_SOURCE -I/data/redis/module/rebloom-1.1.0 -I/data/redis/module/rebloom-1.1.0/contrib  -c -o /data/redis/module/rebloom-1.1.0/src/sb.o /data/redis/module/rebloom-1.1.0/src/sb.c
cc  -Wall -Wno-unused-function -g -ggdb -O2 -fPIC -std=gnu99 -D_GNU_SOURCE -I/data/redis/module/rebloom-1.1.0 -I/data/redis/module/rebloom-1.1.0/contrib  -c -o /data/redis/module/rebloom-1.1.0/src/cf.o /data/redis/module/rebloom-1.1.0/src/cf.c
In file included from /data/redis/module/rebloom-1.1.0/src/cf.c:6:0:
/data/redis/module/rebloom-1.1.0/src/cuckoo.c: In function ‘CuckooFilter_Count’:
/data/redis/module/rebloom-1.1.0/src/cuckoo.c:157:9: warning: passing argument 1 of ‘filterCount’ from incompatible pointer type [enabled by default]
         ret += filterCount(filter->filters[ii], &params);
         ^
/data/redis/module/rebloom-1.1.0/src/cuckoo.c:139:15: note: expected ‘const uint8_t (*)[2]’ but argument is of type ‘uint8_t (*)[2]’
 static size_t filterCount(const CuckooBucket *filter, const LookupParams *params) {
               ^
ld /data/redis/module/rebloom-1.1.0/src/rebloom.o /data/redis/module/rebloom-1.1.0/contrib/MurmurHash2.o /data/redis/module/rebloom-1.1.0/src/sb.o /data/redis/module/rebloom-1.1.0/src/cf.o -o /data/redis/module/rebloom-1.1.0/rebloom.so -shared -Bsymbolic -Bsymbolic-functions -lm -lc
[root@localhost rebloom-1.1.0]# ls
contrib  Dockerfile  docs  LICENSE  Makefile  mkdocs.yml  ramp.yml  README.md  rebloom.so  src  tests

 

最後標紅的 rebloom.so 就是你最終要找的載入文件。

[root@localhost redis]# ./redis-cli
127.0.0.1:6379> module load /data/redis/module/rebloom-1.1.0/rebloom.so
OK

 

3.  簡單使用

 

《1》 bloomfilter 的簡單使用,比如塞入1,2,3,4 。 判斷3,5是否在其中,如下:

127.0.0.1:6379> bf.add myfilter 1
(integer) 1
127.0.0.1:6379> bf.add myfilter 2
(integer) 1
127.0.0.1:6379> bf.add myfilter 3
(integer) 1
127.0.0.1:6379> bf.add myfilter 4
(integer) 1
127.0.0.1:6379> bf.exists myfilter 3
(integer) 1
127.0.0.1:6379> bf.exists myfilter 5
(integer) 0
127.0.0.1:6379>

 

《2》 在github的quickstart中並沒有找到cuckoofilter的使用方式,沒關係撒,找找源文件就好啦。

   

比如下麵的源碼就是告訴你怎麼去使用。

 

接下來就可以簡單的add,delete,exists 啦。

127.0.0.1:6379> cf.add myfilter2 1
(integer) 1
127.0.0.1:6379> cf.add myfilter2 2
(integer) 1
127.0.0.1:6379> cf.add myfilter2 3
(integer) 1
127.0.0.1:6379> cf.add myfilter2 4
(integer) 1
127.0.0.1:6379> cf.del myfilter 2
(error) Not found
127.0.0.1:6379> cf.del myfilter2 2
(integer) 1
127.0.0.1:6379> cf.exists myfilter2 1
(integer) 1

 

   好了,這就是本篇給大家介紹的module,還是蠻有意思的。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MySQL(二進位)安裝: 下載地址:http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.49-linux2.6-x86_64.tar.gz 1、創建虛擬用戶: useradd -s /sbin/nologin mysql -M id mys ...
  • 今天解決了vi命令打開日誌文件中文總是顯示亂碼的問題。由於項目組中的日誌包含一些特殊字元,所以使用vim打開日誌文件時總是不能正確識別出文件字元編碼。此時用:set fileencoding命令可以看出vim把文件編碼識別成latin1。 在這種情況下無論終端設置成gbk還是utf-8編碼,都不能正 ...
  • 安裝系統CentOS,虛擬機好麻煩,直接在阿裡雲開了一個6個月免費的ECS。 熟悉Linux 基本命令 登錄,exit,vi ,vim,vi保存關閉,w,ls,mkdir,df,ip addr,修改系統配置(沒深究),防火牆, 客戶端 XShell6, Putty 在CentOS 安裝.net co... ...
  • 1、查看資料庫當前實例使用的是哪個UNDO表空間: 2、查看UNDO表空間對應的數據文件和大小 3、查看undo表空間屬性: 解釋: undo段中區的狀態: free: 區未分配給任何一個段 active: 已經被分配給段,並且這個段被事務所使用,且事務沒有提交,不能覆蓋。 (區被未提交的事務使用) ...
  • 1、初始化並創建資料庫(一次即可) initdb -D C:\Soft\PostgreSQL\10\data -E UTF-8 --locale=chs -U postgres -W You can now start the database server using(啟動資料庫命令): pg_c ...
  • Mysql 獲取表設計查詢語句 ...
  • 遇到問題: 嘗試了網上的刪除c:\Users\your_name\AppData\Roaming\pgAdmin 之內的刪除所有文件和文件夾, 然後在C:\Program Files\PostgreSQL\10\pgAdmin 4\web 找到config_distro.py文件, 添加:MINIF ...
  • 1.下載,解壓到自己喜歡的目錄 2.配置環境變數。MYSQL_HOME,值為mysql的根目錄;在path中添加%MYSQL_HOME%/bin目錄。 3.向windows註冊mysql服務。必須用管理員許可權打開命令行,然後切換到mysql的bin目錄下,輸入命令:mysqld.exe --inst ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...