Redis中的關係查詢

來源:互聯網
上載者:User

標籤:

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

1 關係型資料的儲存

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


2 匹配查詢

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

3 範圍查詢

因為我們將age儲存成zSet的score,value是id,所以可以利用zSet的zrangeByScore方法獲得score在某一區間範圍內的value值。

4 模糊查詢

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

5 分頁查詢

同時,zrangeByLex還支援分頁查詢,文法類似limit start, offset。

6 局限性

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


 

Redis中的關係查詢

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.