資料庫 - 請問redis遇到條件查詢怎麼辦呢?
巴扎黑
巴扎黑 2017-04-21 11:16:04
0
1
738

我是新手剛想學redis,但是看了很多資料都在說redis怎麼快怎麼快,很少說具體怎麼應用到項目上的,就算有也是做隊列或是緩存用。看了看redis入門資料也說redis隻支持k->v類型的數據保存且沒有條件查詢,那如果遇到條件查詢了怎麼辦呢?如保存了一些對象:a{name:lijiang age:60 } 請問怎麼查詢所有姓li的用戶或所有年齡是60的用戶呢?

巴扎黑
巴扎黑

全部回覆(1)
小葫芦

快是有代價的。 redis是一個非關係型資料庫。要按條件查詢的話必須手動為資料建立索引。

保存物件可以用hashset。假設hashset的key是'user:姓名'這種形式。
條件查詢可以用sorted set。 key是對象的一個field。找名字的時候,可以用zRangeByLex指令:

redis> zadd personIndex:name 0 lijiang 0 likui 0 abcde
(integer) 3
redis> zRangeByLex personIndex:name [li (lj
1) "lijiang"
2) "likui"

之後就可以用user:lijiang,user:likui取得相關資訊。

要找名字以li開始的人,可以用'[li (lj'找出處於[li..., lj)這個半開區間的字串。 redis比較一個字串和它的字首時,長的比較大(例如:liA > li,liABCDEF……

(註:zRangeByLex需要redis版本>2.8.9)

而條件找出年齡,可以用sorted set的zRangeByScore指令:

redis> zadd personIndex:age 60 lijiang 30 likui 20 abcde
(integer) 3
redis> zRangeByScore personIndex:age 30 60
1) "likui"
2) "lijiang"

zRangeByScore的三個參數分別是:key,min, max(閉區間)

參考:http://redis.io/commands/

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板