84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
我是新手刚想学redis,但是看了很多资料都在说redis怎么快怎么快,很少说具体怎么应用到项目上的,就算有也是做队列或是缓存用。看了看redis入门资料也说redis只支持k->v类型的数据保存且没有条件查询,那如果遇到条件查询了怎么办呢?如保存了一些对象:a{name:lijiang age:60 } 请问怎么查询所有姓li的用户或所有年龄是60的用户呢?
快是有代價的。 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/
快是有代價的。 redis是一個非關係型資料庫。要按條件查詢的話必須手動為資料建立索引。
保存物件可以用hashset。假設hashset的key是'user:姓名'這種形式。
條件查詢可以用sorted set。 key是對象的一個field。找名字的時候,可以用zRangeByLex指令:
之後就可以用user:lijiang,user:likui取得相關資訊。
要找名字以li開始的人,可以用'[li (lj'找出處於[li..., lj)這個半開區間的字串。 redis比較一個字串和它的字首時,長的比較大(例如:liA > li,liABCDEF……
(註:zRangeByLex需要redis版本>2.8.9)
而條件找出年齡,可以用sorted set的zRangeByScore指令:
zRangeByScore的三個參數分別是:key,min, max(閉區間)
參考:http://redis.io/commands/