hsetuser:1score100hsetuser:2socre101hsetuser:3score200hsetuser:4score201要找出socre最高的user,应该如何设计。
2 回答

芜湖不芜
TA贡献1796条经验 获得超7个赞
hset是不能直接排序的。有替代方案可以实现相当于hset排序的效果,即利用sort功能。sort一般只能对list,set和zset排序,不过可以变通一下。sort的使用方式如下:SORTkey[BYpattern][LIMIToffsetcount][GETpattern[GETpattern...]][ASC|DESC][ALPHA][STOREdestination]注意它的by和store两个参数。by用于确定按照什么字段进行排序,store则能够把排序结果存到一个list中。你可以先把所有的hash键存到一个set中,比如说,这个set的键名为myhashes,然后按照set中每个元素(即每个hash)的score域进行排序,最后把排序结果存到键名为myresult的list中。这里的排序结果当然就是set中所有元素(即所有hash键)的键名了,用GET参数加#就能得到set中所有元素的键名,写出来就是这样:SORTmyhashesBY*->scoreGET#STOREmyresultSORT会用myhashes中的每个值(即每个hash键名)替换BY参数中的*,并根据->后面给出的字段获取其值,最后根据这些字段值对myhashes中的每个值进行排序。这样,myresult中就是已经按照score排好序的hash键名了。最后,我看你的hash设计有点问题。hash比较像sql数据库的一行,有多个域,每个域有相应的值。如果你只是一个score域,可以考虑用zset。
添加回答
举报
0/150
提交
取消