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。
没有任何选项就是简单的对集合自身元素排序并返回排序结果.下面给个例子
redis> lpush ml 12
(integer) 1
redis> lpush ml 11
(integer) 2
redis> lpush ml 23
(integer) 3
redis> lpush ml 13
(integer) 4
redis> sort ml
1. "11"
2. "12"
3. "13"
4. "23"