您的位置:首页 > 数据库 > Redis

Redis 学习笔记3-排序

2015-11-25 19:43 633 查看
1 redis使用sort对集合元素排序,默认是按数字升序,如果元素是字母需要加 alpha ,默认是 a-z ,如果倒序,需要使用desc

    127.0.0.1:6379> sadd s1 a
(integer) 1
127.0.0.1:6379> sadd s1 c
(integer) 1
127.0.0.1:6379> sadd s1 b
(integer) 1
127.0.0.1:6379> sort s1
(error) ERR One or more scores can't be converted into double
127.0.0.1:6379> sort s1 alpha
1) "a"
2) "b"
3) "c"
2 by  模式

   先看一个例子:

  127.0.0.1:6379> sadd s1 a
(integer) 1
127.0.0.1:6379> sadd s1 b
(integer) 1
127.0.0.1:6379> sadd s1 c
(integer) 1
127.0.0.1:6379> set sa 1
OK
127.0.0.1:6379> set sc 2
OK
127.0.0.1:6379> set sb 3
OK
127.0.0.1:6379> sort s1 by s*
1) "a"
2) "c"
3) "b"
127.0.0.1:6379> sort s1 by s* desc
1) "b"
2) "c"
3) "a"

 字符串s* 是一种模式,s* 匹配 sa sb sc,这样就好按着字符串键对应的值排序,排序依据不再是自身元素 而是其他的模式。
 上面是字符串作为一种模式,hash也可以作为一种模式  根据key->键  的值匹配

127.0.0.1:6379> hset ha id 3
(integer) 1
127.0.0.1:6379> hset hb id 1
(integer) 1
127.0.0.1:6379> hset hc id 2
(integer) 1
127.0.0.1:6379> sort s1 by h*->id
1) "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 2
1) "a"
2) "b"
127.0.0.1:6379>

 4 返回结果进行缓存 store  
127.0.0.1:6379> sort s1 alpha store s2
(integer) 3
127.0.0.1:6379> lrange s2 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379>

5 综合小例子:

tom的好友id

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

id对应的姓名和成绩
127.0.0.1:6379> set uid:name:112 zhangsan
OK
127.0.0.1:6379> set uid:name:115 lisi
OK
127.0.0.1:6379> set uid:name:119 wangwu
OK
127.0.0.1:6379> set uid:score:112 99
OK
127.0.0.1:6379> set uid:score:115 90
OK
127.0.0.1:6379> set uid:score:119 95
OK

tom的好友成绩从低到高排序对应的姓名是:
127.0.0.1:6379> sort tom:friends:uids by uid:score:* get uid:name:*
1) "lisi"
2) "wangwu"
3) "zhangsan"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  redis