Redis之sorted sets类型及操作

来源:互联网 发布:dota2数据查询 编辑:程序博客网 时间:2024/05/23 18:39

SORTED SETS

sorted set是set的一个升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。
和set一样sorted set也是string类型元素的集合,不同的是每个元素都会关联一个double类型的score。sorted set的实现是skip list和hash table的混合体。
当元素被添加到集合中时,一个元素到score的映射被添加到hash table中,所以给定一个元素获取score的开销是O(1),另一个score到元素的映射被添加到skip list,并按照score排序,所以就可以有序的获取集合中的元素。添加,删除操作开销都是O(log(N))和skip list的开销一致,redis的skip list实现用的是双向链表,这样就可以逆序从尾部取元素。sorted set最经常的使用方式应该是作为索引来使用.我们可以把要排序的字段作为score存储,对象的id当元素存储。


zadd
向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序
zadd key [NX|XX] [CH] [INCR] score member [score member …]
其中:
- NX:不更新存在的成员,只添加新成员
- XX:仅仅更新存在的成员,不添加新成员
- CH:修改返回值为发生变化的成员总数,原始是返回新添加成员的总数(CH是change的意思)。更改的元素是新添加的成员,已经存在的成员更新分数。所以在命令中指定的成员有相同的分数将不被计算在内。注:在通常情况下,zadd返回值只计算新添加成员的数量
- INCR:当zadd指定这个选项时,成员的操作就等同ZINCRBY命令,对成员的分数进行递增操作。

zrem
删除名称为key的zset中的元素member
zrem key member [member …]

zincrby
如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment

zrank
返回名称为key的zset中member元素的排名(按score从小到大排序)即下标
zrank key member

zrange
显示名称为key的所选范围的member(和score)
zrange key start stop [withscores]

zrevrank
返回名称为key的zset中member元素的排名(按score从大到小排序)即下标
zrevrank key member

zrevrange
返回名称为key的zset(按score从大到小排序)中的index从start到end的所有元素
zrevrange key start stop [withscores]

zrangebyscore
返回集合中score在给定区间的元素
zrangebyscore key min max [withscores]

zcount
返回集合中score在给定区间的数量
zcount key min max

zcard
在是集合中元素个数
zcard key

zscore
返回给定元素打印的score
zscore key member

zremrangebyrank
删除集合中排名在给定区间的元素
zremrangebyrank key start stop

zremrangebyscore
删除集合中score在给定区间的元素
zrmemrangebyscore key start stop

0 0
原创粉丝点击