Redis学习-sorted sets

来源:互联网 发布:北京现代软件学院官网 编辑:程序博客网 时间:2024/06/14 03:28

有序集合跟hash很像,hash存储着key与value之间的对应关系,有序集合存储着成员与分值之间的映射关系,有序是靠分值来实现的
一些命令:
zadd key [nx|xx][ch][incr] [score member…]将所有指定的成员添加到键为key的有序集合里面,添加时可以指定多个分数/成员(score/member)对。如果指定的成员已经存在于有序集合中,则更新成员的分数;如果key不存在则会直接创建;如果key存在但类型不对将会返回一个错误信息,分值是一个双精度的浮点型数字字符串。+inf和-inf都是有效的值。[nx|xx][ch][incr]这几个参数是redis3.0.2新增的特性:
xx 仅更新存在的成员,不添加新成员
nx 公添加新成员,不更新存在的成员
ch 返回值为发生变化的成员总数,不加此参数返回的是新增成员的总数
incr 指定这个参数时,成员的操作就等同于zincrby,对成员的分数进行递增

zcard key 获取有序集合中成员数量
zcount key min max 返回min到max范围内的成员数量
zscore key member 返回有序集合key中,成员member的score值
zincrby key increment member 为key中的member的分值增加increment,如果member不存在,则新增一个member,分值为increment
zlexcount key [member1 [member2 计算有序集合中成员名称member1和member2之间的成员数量。-和+表示最小值和最大值
zrange key start top [withscores] 返回有序集合中指定区间内的成员
zrevrange key start stop [withscores] 返回有序集合中指定区间内的成员
zrangebylex key min max [limit offset count] 返回指定区间内的成员,按成员字典正序排序,分数必须相同。在一些业务场景中,需要对一个字符串数组按名称的字典顺序进行排序时,可以使用SortSet来处理。limit表示返回结果是否分页,limit指定后,offset与count必须有值,分别表示分页的起始位置与结果数量
zrevrangebylex key max in [limit offset count] 与zrangebylex相反,按成员字典倒序排列时,分数也必须相同。其他参数一样
zrangebyscore key min max [withscores] [limit offset count] 返回有序集合key中分数在min和max之间的所有元素(包括min和max)。元素是从低分到高分排序的,具有相同的分数按字典顺序排列
zrank key member 返回有序集合key中member的排名。其中有序集合按score值递增顺序排列,score的值最小成员排名为0
zrevrank key member与zrank相反,返回按score值递减排列的排名。
zrem key [member …] 从有序集合key中删除一个或多个成员。在2.4以前的版本只能删除一个成员。
zremrangebylex key min max 删除名称按字典由低到高排序并在min与max之间所有的成员。注意:此命令需要在成员分数相同的有序集合上使用,因为此命令是基于分数相同的有序集合而设计的,如果分数不相同使用此命令会导致删除结果不正确
zremrangebyrank key start stop 删除有序集合key中,排名在start与stop区间内的所有成员。start与stop都以0为最小分数。也可以为负数,表示位移从最高分处开始。例如,-1是分数最高的元素,-2是分数第二的,依次类推。
zremrangebyscore key min max 删除有序集合key中,所有score值介于min与max之间的成员。

zrevrangebyscore key max min [withscores] 返回有序集合中指定分数区间内的成员,分数由高到低排序

zscan key cursor [MATCH pattern] 迭代sorted sets里面的元素

127.0.0.1:6379> zadd zset1 1 one(integer) 1127.0.0.1:6379> zadd zset1 2 two(integer) 1127.0.0.1:6379> zadd zset1 2 ucn (integer) 1127.0.0.1:6379> zadd zset1 3 three 4 four(integer) 2127.0.0.1:6379> zcard zset1(integer) 5127.0.0.1:6379> zscore zset1 three"3"127.0.0.1:6379> zcount zset1 1 3(integer) 4127.0.0.1:6379> zincrby zset1  2 one"3"127.0.0.1:6379> zlexcount zset1 - +(integer) 5127.0.0.1:6379> zrange zset1 1 5 withscores1) "ucn"2) "2"3) "one"4) "3"5) "three"6) "3"7) "four"8) "4"127.0.0.1:6379> zrevrange zset1 1 5 withscores1) "three"2) "3"3) "one"4) "3"5) "ucn"6) "2"7) "two"8) "2"127.0.0.1:6379> zadd zset2 1 a 1 aa 1 abc 1 apple 1 b 1 c 1 d 1 d1 1 dd 1 dobb1(integer) 10127.0.0.1:6379> zrangebylex zset2 - + 1) "a" 2) "aa" 3) "abc" 4) "apple" 5) "b" 6) "c" 7) "d" 8) "d1" 9) "dd"10) "dobb1"127.0.0.1:6379> zrevrangebylex zset2 + - 1) "dobb1" 2) "dd" 3) "d1" 4) "d" 5) "c" 6) "b" 7) "apple" 8) "abc" 9) "aa"10) "a"127.0.0.1:6379> zrangebyscore zset2 1 2 withscores 1) "a" 2) "1" 3) "aa" 4) "1" 5) "abc" 6) "1" 7) "apple" 8) "1" 9) "b"10) "1"11) "c"12) "1"13) "d"14) "1"15) "d1"16) "1"17) "dd"18) "1"19) "dobb1"20) "1"## 命令很多,也都很有用,用到的时候再来查询,就不一一介绍了