天天看點

Redis有序集合資料類型操作指令

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&gt; zadd myzset 1 one</code>

<code>(integer) 1</code>

<code>(0.76s)</code>

<code>127.0.0.1:6379&gt; zadd myzset 2 two</code>

<code>127.0.0.1:6379&gt; zadd myzset 3 two</code>

<code>(integer) 0</code>

<code>127.0.0.1:6379&gt; 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&gt; zrange myzset 0 -1 </code>

<code>2) </code><code>"two"</code>

zrange:對有序集合中的元素按照score值進行升序排序

zrem:删除名為key的zset中元素member

<code>127.0.0.1:6379&gt; zrem myzset two</code>

zincrby:如果在名稱為key的zset中已經存在元素member,則該元素的score增加increment,否則向該集合中添加該元素,其score的值為increment

<code>127.0.0.1:6379&gt; zincrby myzset 2 one</code>

<code>"3"</code>

<code>2) </code><code>"3"</code>

<code>127.0.0.1:6379&gt; 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&gt; 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&gt;zrange myzset 0 -1 withscores</code>

<code>127.0.0.1:6379&gt; zrank myzset one</code>

<code>127.0.0.1:6379&gt; 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&gt; zrevrank myzset five</code>

<code>127.0.0.1:6379&gt; zrevrank myzset four</code>

<code>127.0.0.1:6379&gt; zrevrank myzset three</code>

<code>(integer) 2</code>

zrevrank和zrank相反,zrevrank先将有序集合中的元素按照score進行降序排序,然後再擷取元素的小标索引值

zrevrange:與zrange相反,對有序集合中的元素按照score值進行降序排序

127.0.0.1:6379&gt; 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&gt; zrevrange myzset 0 -1 withscores</code>

<code>127.0.0.1:6379&gt; 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&gt; zcount myzset 2 4</code>

<code>(integer) 3</code>

zcard:傳回集合中所有元素的個數

<code>127.0.0.1:6379&gt; zcard myzset </code>

<code>(integer) 5</code>

zremrangebyrank:删除集合在給定下标區間的所有元素

<code>10) </code><code>"5"</code>

<code>127.0.0.1:6379&gt; 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&gt; 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,如需轉載請自行聯系原作者