注意它的by和store兩個參數。 by用來決定依照什麼欄位排序,store則能夠把排序結果存到一個list中。你可以先把所有的hash鍵存到一個set中,比如說,這個set的鍵名為myhashes,然後按照set中每個元素(即每個hash)的score域進行排序,最後把排序結果存到鍵名為myresult的list中。這裡的排序結果當然就是set中所有元素(即所有hash鍵)的鍵名了,用GET參數加#就能得到set中所有元素的鍵名,寫出來就是這樣:
SORT myhashes BY *->score GET # STORE myresult
hset是不能直接排序的。有替代方案可以實現相當於hset排序的效果,即利用sort功能。 sort一般只能對list,set和zset排序,不過可以變通一下。 sort的使用方式如下:
SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination]
注意它的by和store兩個參數。 by用來決定依照什麼欄位排序,store則能夠把排序結果存到一個list中。你可以先把所有的hash鍵存到一個set中,比如說,這個set的鍵名為myhashes,然後按照set中每個元素(即每個hash)的score域進行排序,最後把排序結果存到鍵名為myresult的list中。這裡的排序結果當然就是set中所有元素(即所有hash鍵)的鍵名了,用GET參數加#就能得到set中所有元素的鍵名,寫出來就是這樣:
SORT myhashes BY *->score GET # STORE myresult
SORT會用myhashes中的每個值(即每個hash鍵名)取代BY參數中的*,並根據->後面給出的字段獲取其值,最後根據這些字段值對myhashes中的每個值進行排序。這樣,myresult中就是已經按照score排好序的hash鍵名了。
最後,我看你的hash設計有點問題。 hash比較像sql資料庫的一行,有多個域,每個域有對應的值。如果你只是score域,可以考慮用zset。
HashSet
没法直接排。得单独维护一个SortedSet
,裡面只保存使用者ID和對應的分數。不知道是不是這個意思
直接上程式碼了
文檔
http://redis.cn/commands/sort.html
Hash 沒辦法進行排序.
如果需要排序, 請使用ZSET操作, ZADD SCORES MEMBERS
思路為:
再PS 一下, 如果你的 HASH 只用於存儲 一個hashkey SCORES 不建議這樣存..