sorted sets类型及操作
sorted set是set的一个升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset(有序集合)会自动重新按新的值调整顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。
zset的方法:
zadd:向名称为key的zset中添加元素member,score用于排序。如果该元素存在,则更新其顺序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<code>127.0.0.1:6379> zadd myzset 1 one</code>
<code>(integer) 1</code>
<code>(0.76s)</code>
<code>127.0.0.1:6379> zadd myzset 2 two</code>
<code>127.0.0.1:6379> zadd myzset 3 two</code>
<code>(integer) 0</code>
<code>127.0.0.1:6379> zrange myzset 0 -1 withscores</code>
<code>1) </code><code>"one"</code>
<code>2) </code><code>"1"</code>
<code>3) </code><code>"two"</code>
<code>4) </code><code>"3"</code>
<code>127.0.0.1:6379> zrange myzset 0 -1 </code>
<code>2) </code><code>"two"</code>
zrange:对有序集合中的元素按照score值进行升序排序
zrem:删除名为key的zset中元素member
<code>127.0.0.1:6379> zrem myzset two</code>
zincrby:如果在名称为key的zset中已经存在元素member,则该元素的score增加increment,否则向该集合中添加该元素,其score的值为increment
<code>127.0.0.1:6379> zincrby myzset 2 one</code>
<code>"3"</code>
<code>2) </code><code>"3"</code>
<code>127.0.0.1:6379> zincrby myzset 2 two</code>
<code>"2"</code>
<code>1) </code><code>"two"</code>
<code>2) </code><code>"2"</code>
<code>3) </code><code>"one"</code>
如果增加的幅度值为负数,则表示自减
<code>127.0.0.1:6379> zincrby myzset -2 one</code>
<code>"1"</code>
<code>4) </code><code>"2"</code>
zrank:返回名称为key的zset中member元素的排名(按score从小到大排序),即下标(或者说是索引)
<code>127.0.0.1:6379>zrange myzset 0 -1 withscores</code>
<code>127.0.0.1:6379> zrank myzset one</code>
<code>127.0.0.1:6379> zrank myzset two</code>
在myzset中one的score为1,two的score为2,而索引是从0开始的,所以one的索引值为0,two的索引值为1.
注意:索引值和score值不相等,索引值比score值小1
zrevrank:返回名称为key的zset中member元素的排名(按score从大到小排序)即小标
16
17
<code> </code><code>1) </code><code>"one"</code>
<code> </code><code>2) </code><code>"1"</code>
<code> </code><code>3) </code><code>"two"</code>
<code> </code><code>4) </code><code>"2"</code>
<code> </code><code>5) </code><code>"three"</code>
<code> </code><code>6) </code><code>"3"</code>
<code> </code><code>7) </code><code>"four"</code>
<code> </code><code>8) </code><code>"4"</code>
<code> </code><code>9) </code><code>"five"</code>
<code> </code><code>10) </code><code>"5"</code>
<code>127.0.0.1:6379> zrevrank myzset five</code>
<code>127.0.0.1:6379> zrevrank myzset four</code>
<code>127.0.0.1:6379> zrevrank myzset three</code>
<code>(integer) 2</code>
zrevrank和zrank相反,zrevrank先将有序集合中的元素按照score进行降序排序,然后再获取元素的小标索引值
zrevrange:与zrange相反,对有序集合中的元素按照score值进行降序排序
127.0.0.1:6379> zrevrange myzset 0 -1 withscores
<code> </code><code>1) </code><code>"five"</code>
<code> </code><code>2) </code><code>"5"</code>
<code> </code><code>3) </code><code>"four"</code>
<code> </code><code>4) </code><code>"4"</code>
<code> </code><code>7) </code><code>"two"</code>
<code> </code><code>8) </code><code>"2"</code>
<code> </code><code>9) </code><code>"one"</code>
<code> </code><code>10) </code><code>"1"</code>
zrangebyscore:返回集合中score在给定区间的元素
18
<code>127.0.0.1:6379> zrevrange myzset 0 -1 withscores</code>
<code>127.0.0.1:6379> zrangebyscore myzset 2 4 withscores</code>
<code>3) </code><code>"three"</code>
<code>5) </code><code>"four"</code>
<code>6) </code><code>"4"</code>
zcount:返回集合中score在给定区间的元素的数量
<code>127.0.0.1:6379> zcount myzset 2 4</code>
<code>(integer) 3</code>
zcard:返回集合中所有元素的个数
<code>127.0.0.1:6379> zcard myzset </code>
<code>(integer) 5</code>
zremrangebyrank:删除集合在给定下标区间的所有元素
<code>10) </code><code>"5"</code>
<code>127.0.0.1:6379> zremrangebyrank myzset 1 3</code>
<code>3) </code><code>"five"</code>
<code>4) </code><code>"5"</code>
注意:这个是byrank,即按照所以来删除,不是按照score来删除
zremrangebyscore:删除集合在给定score区间的元素
<code>127.0.0.1:6379> zremrangebyscore myzset 0 1 </code>
<code>1) </code><code>"five"</code>
<code>2) </code><code>"5"</code>
<code></code>
本文转自 曾哥最爱 51CTO博客,原文链接:http://blog.51cto.com/zengestudy/1860018,如需转载请自行联系原作者