Redis 学习笔记3-排序

来源:互联网 发布:网络直播公司创业计划 编辑:程序博客网 时间:2024/06/13 23:58


1 redis使用sort对集合元素排序,默认是按数字升序,如果元素是字母需要加 alpha ,默认是 a-z ,如果倒序,需要使用desc

    

127.0.0.1:6379> sadd s1 a(integer) 1127.0.0.1:6379> sadd s1 c(integer) 1127.0.0.1:6379> sadd s1 b(integer) 1127.0.0.1:6379> sort s1(error) ERR One or more scores can't be converted into double127.0.0.1:6379> sort s1 alpha1) "a"2) "b"3) "c"

2 by  模式

   先看一个例子:

 

127.0.0.1:6379> sadd s1 a(integer) 1127.0.0.1:6379> sadd s1 b(integer) 1127.0.0.1:6379> sadd s1 c(integer) 1127.0.0.1:6379> set sa 1OK127.0.0.1:6379> set sc 2OK127.0.0.1:6379> set sb 3OK127.0.0.1:6379> sort s1 by s*1) "a"2) "c"3) "b"127.0.0.1:6379> sort s1 by s* desc1) "b"2) "c"3) "a"


 字符串s* 是一种模式,s* 匹配 sa sb sc,这样就好按着字符串键对应的值排序,排序依据不再是自身元素 而是其他的模式。

 上面是字符串作为一种模式,hash也可以作为一种模式  根据key->键  的值匹配

127.0.0.1:6379> hset ha id 3(integer) 1127.0.0.1:6379> hset hb id 1(integer) 1127.0.0.1:6379> hset hc id 2(integer) 1127.0.0.1:6379> sort s1 by h*->id1) "b"2) "c"3) "a"


要获取模式的值,使用get 模式 ,get  # 获得集合元素值

127.0.0.1:6379>  sort s1 by s* desc get s*  get #1) "3"2) "b"3) "2"4) "c"5) "1"6) "a"127.0.0.1:6379> 


3 指定范围  limit  索引    返回的数量

127.0.0.1:6379> sort s1 alpha limit 0 21) "a"2) "b"127.0.0.1:6379> 


 4 返回结果进行缓存 store  

127.0.0.1:6379> sort s1 alpha store s2(integer) 3127.0.0.1:6379> lrange s2 0 -11) "a"2) "b"3) "c"127.0.0.1:6379> 


5 综合小例子:

tom的好友id

127.0.0.1:6379> sadd tom:friends:uids 112(integer) 1127.0.0.1:6379> sadd tom:friends:uids 115(integer) 1127.0.0.1:6379> sadd tom:friends:uids 119(integer) 1

id对应的姓名和成绩

127.0.0.1:6379> set uid:name:112 zhangsanOK127.0.0.1:6379> set uid:name:115 lisiOK127.0.0.1:6379> set uid:name:119 wangwuOK127.0.0.1:6379> set uid:score:112 99OK127.0.0.1:6379> set uid:score:115 90OK127.0.0.1:6379> set uid:score:119 95OK


tom的好友成绩从低到高排序对应的姓名是:

127.0.0.1:6379> sort tom:friends:uids by uid:score:* get uid:name:*1) "lisi"2) "wangwu"3) "zhangsan"




0 0
原创粉丝点击