Redis中的關係查詢

本文對Redis如何保存關係型數據,以及如何對其匹配、範圍、模糊查詢進行舉例講解,其中模糊查詢功能基於最新的2.8.9以後版本。

關係型數據的存儲

Staff對象爲例,在關係型數據庫或類似GridGain的內存網格產品中(底層使用H2數據庫的內存模式存儲),我們以表形式保存對象的數據。因爲內存網格是基於對象做緩存的,所以還要額外多出一列(Staff)保存整個對象的編碼,例如序列化後的二進制或者JSON格式等,便於直接返回給應用後進行反序列化。而在Redis中,我們可以用id作爲唯一標識,使用key-valuehashzSet三種數據結構進行保存。Key-value是爲了保存id和整個對象,確定id範圍後可根據它將對象返回給客戶端,而選擇其他兩種數據結構的具體原因後面再說。


匹配查詢

利用hash表的hgethmget可以實現dept='IT'或者dept in ('IT', 'QA')這種單值或多值的完全匹配查詢。拿到id列表後,再去查詢key-value獲得到對象。

範圍查詢

因爲我們將age保存成zSetscorevalueid,所以可以利用zSetzrangeByScore方法獲得score在某一區間範圍內的value值。

模糊查詢

Redis 2.8.9zSet加入了一個非常有用的方法zrangeByLex,我們將score都保存爲0value是姓名:id的格式,利用zrangeByLex可以獲得字母在某一區間內的value值。例如,zrangeByLex name [A, (F,可以查詢出Allen, Aaron, Carter

分頁查詢

同時,zrangeByLex還支持分頁查詢,語法類似limit start, offset

侷限性

上述舉例說明了幾種常見查詢在Redis的實現方式,但是Redis畢竟只是key-value存儲,所以有很多侷限性。例如,1)無法實現多條件組合的查詢,例如age>25 AND name like 'A%',硬要實現的話需要多條命令並計算並集或交集。2)模糊查詢中文比較費勁:

發佈了106 篇原創文章 · 獲贊 21 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章