码迷,mamicode.com
首页 > 其他好文 > 详细

辛星浅析Redis中的有序集合

时间:2015-02-23 19:02:41      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:redis   有序集合   sorted set   辛星   

      Redis中的有序集合也就是sorted-set,它和set很相似,都是字符串的集合,都不允许重复的成员出现在一个集合张。有序集合与集合的主要差别是有序集合中的每一个元素都有一个序号与其相连,这个序号即score,Redis通过这个序号来为集合中的成员进行从小到大的排列。需要特别说明的是,尽管有序集合的元素值是唯一的,但是该value对应的score却可以是多个。在有序集合中添加、删除、更新一个成员的操作都很快,其时间复杂度是集合中成员的对数。 因为有序集合中的成员在集合中的位置是有序的,即便是访问集合中间部分的成员的效率也很高。

     我们可以使用有序集合来设计一个类似于积分排行榜的东西,那么每当用户的积分发生变化时,可以实行zadd命令来更新用户的积分,然后通过zrange来获取积分前若干的用户信息。当然也可以利用zrank命令来通过username来获取用户的排行信息。

     下面是有序集合的常见命令:

     (1)zadd   集合名    下标1   元素1   [下标2    元素2.....]   它是向有序集合中添加元素,在该命令中我们可以指定多组的下标元素对。如果在添加时参数中的某一成员已经存在,那么该命令将会更新此成员的分数为新值,同时再将该成员基于该新值重新排序。如果集合名不存在,该命令会创建一个新的有序集合,并且将下标元素对插入其中。如果集合名已存在,但是其作为key与之关联的value并不是有序集合,那么将会返回错误信息。该操作的返回值是实际插入的成员数量。

     (2)zcard    集合名    该命令会获取有序集合中的成员数量。返回值是有序集合中的成员数量,如果该有序集合不存在,那么返回0.

     (3)zcount   集合名  最小下标   最大下标    其中我们可以使用+inf或者-inf,其中+inf表示有序集合中下标的最大值,而-inf则表示有序集合中的最小值。在默认情况下,最小下标和最大下标都是闭区间的,但是我们可以在最小下标或者最大下标中添加一个"("来表示开区间。它返回的是指定下标范围内的元素的数量。

     (4)zincrby   集合名    增量    元素名     它可以为指定的有序集合张的指定成员的下标增加一个增量,如果成员不存在,该命令添加该成员并且假设其初始下标为0,伺候在将其下标加上增量。如果集合名不存在,那么该命令将会自动创建该集合,并且添加相应的键值对。它返回的是以字符串形式表示的新下标。

    (5)zrange   集合名   起始下标   结束下标  [withscores]     它会返回下标在起始下标与结束下标之间的成员,注意这里的下标是从0开始的,而-1则表示最后一个成员。我们的可选参数withscores表示同时返回每个成员的下标。它表示返回索引在起始下标与结束下标之间的成员列表。

    (6)zrangebyscore   集合名  最小下标   最大下标   [withscores ][limit  offset  count]  该命令返回下标在最小下标到最大下表中中的所有成员,它返回的成员按照分数从低到高的顺序返回,如果成员有相同的分数,则按成员的字典顺序返回。可选的limit用于控制返回成员的数量范围。可选的参数offset表示从符合条件的第offset个成员开始返回,同时返回count个成员。

   (7)zrank   集合名   元素名      它是该集合中的成员按照下标从低到高的顺序存储,该命令将返回参数中指定成员的位置值,其中0表示参数中指定成员的位置值。

   (8)zrem    集合名   元素1   元素2   ..... 该命令移除参数中指定的成员,如果不存在则会被忽略。它返回的是实际被删除的成员数量。

 (9)zrevrange   集合名   起始下标   结束下标 [withscores]     它与zrange基本相同,唯一的差别在于该命令通过反向排序获取指定位置的成员,也就是从高到低的顺序。

   (10)zrevrank   集合名    元素     它获取排名的时候是从高到低的顺序来编号的,注意下标最大的顺序为0奥

   (11)zscore    集合名   元素       它获取指定集合名中的指定成员的下标

   (12)zrevrangebyscore   集合名   最大下标   最小下标  [withscores][limit offset count]     该命令除了排序方式是基于从高到低的下标排序之外,其他的和zrangebyscore相同。

    (13)zremrangebyrank   集合名   起始下标   结束下标    它是删除索引位置位于起始下标和结束下标之间的成员,注意起始下标和结束下标都是0-based,也就是0表示分数最低的成员,而-1表示最后一个成员,即分数最高的成员。

    (14)zremrangebyscore   集合名    最小下标   最大下标    它是删除分数在最小下标和最大下标之间的所有成员,对于最小下标和最大下标,也可以采用开区间的形式。


       基本我们就介绍到这里啦,希望有用。

辛星浅析Redis中的有序集合

标签:redis   有序集合   sorted set   辛星   

原文地址:http://blog.csdn.net/xinguimeng/article/details/43916979

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!