天天看點

NoSQL資料庫之Redis資料庫管理(set類型和zset類型)

4.sets類型

        Set是集合,它是string類型的無序集合。set是通過hash table實作的,添加、删除和查找的複雜度都是O(1)。對集合我們可以取并集、交集、差集。通過這些操作我們可以實作sns中的好友推薦和blog的tag功能。

        sadd:向名稱為key的set中添加元素。

redis 127.0.0.1:6379> sadd myset "hello"
(integer) 1  //表示添加成功
redis 127.0.0.1:6379> sadd myset "world"
(integer) 1  //表示添加成功
redis 127.0.0.1:6379> sadd myset "world"
(integer) 0  //表示添加不成功
redis 127.0.0.1:6379> smembers myset
1) "world"
2) "hello"      

        srem:删除名稱為key的set中的元素。

redis 127.0.0.1:6379> sadd myset2 one
(integer) 1
redis 127.0.0.1:6379> sadd myset2 two
(integer) 1
redis 127.0.0.1:6379> sadd myset2 three
(integer) 1
redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
3) "one"
redis 127.0.0.1:6379> srem myset2 two
(integer) 1
redis 127.0.0.1:6379> srem myset2 two
(integer) 0
redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "one"      

        spop:随機傳回并删除名稱為key的set中一個元素。

redis 127.0.0.1:6379> sadd myset3 one
(integer) 1
redis 127.0.0.1:6379> sadd myset3 two
(integer) 1
redis 127.0.0.1:6379> sadd myset3 three
(integer) 1
redis 127.0.0.1:6379> sadd myset3 four
(integer) 1
redis 127.0.0.1:6379> sadd myset3 five
(integer) 1
redis 127.0.0.1:6379> smembers myset3
1) "four"
2) "three"
3) "two"
4) "one"
5) "five"
redis 127.0.0.1:6379> spop myset3
"one"
redis 127.0.0.1:6379> spop myset3
"four"
redis 127.0.0.1:6379> spop myset3
"three"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "five"      

        sdiff:傳回所有給定key與第一個key的差集。

redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sdiff myset2 myset3
1) "three"      

        sdiffstore:傳回所有給定key與第一個key的差集,并将結果存為另一個key。

redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sdiffstore myset4 myset2 myset3
(integer) 1
redis 127.0.0.1:6379> smembers myset4
1) "three"      

        sinter:傳回所有給定key的交集。

redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sinter myset2 myset3
1) "two"      

        sinterstore:傳回所有給定key的交集,并将結果存為另一個key。

redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sinterstore myset6 myset2 myset3
(integer) 1
redis 127.0.0.1:6379> smembers myset6
1) "two"      

        sunion:傳回所有給定key的并集。

redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sunion myset2 myset3
1) "three"
2) "one"
3) "two"      

        sunionstore:傳回所有給定key的并集。

redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sunionstore myset7 myset2 myset3
(integer) 3
redis 127.0.0.1:6379> smembers myset7
1) "three"
2) "one"
3) "two"
      

        smove:從第一個key對應的set中移除member并添加到第二個對應的set中。

redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> smove myset2 myset7 three
(integer) 1
redis 127.0.0.1:6379> smembers myset2
1) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
3) "three"
      

        scard:傳回名稱為key的set的元素個數。

redis 127.0.0.1:6379> scard myset3
(integer) 3      

        sismember:測試member是否是名稱為key的set的元素。

redis 127.0.0.1:6379> smembers myset2
1) "two"
redis 127.0.0.1:6379> sismember myset2 two
(integer) 1
redis 127.0.0.1:6379> sismember myset2 one
(integer) 0      

        srandmember:随機傳回名稱為key的set的一個元素,但不删除元素。

redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> srandmember myset3
"two"
redis 127.0.0.1:6379> srandmember myset3
"one"      

5.sorted sets類型

        sorted set是set的一個更新版本,它在set的基礎上增加了一個順序屬性,這一屬性在添加修改元素的時候可以指定,每次指定後,zset會自動重新按新的值調整順序。可以了解為有兩列的mysql表,一列存value,一列存順序。操作中key了解為zset的名字。

        zadd:向名稱為key的zset中添加元素member,score用于排序。如果該元素存在,則更新其順序。

redis 127.0.0.1:6379> zadd myzset 1 "one"
(integer) 1
redis 127.0.0.1:6379> zadd myzset 2 "two"
(integer) 1
redis 127.0.0.1:6379> zadd myzset 3 "two"
(integer) 0
redis 127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "3"      

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

redis 127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "3"
redis 127.0.0.1:6379> zrem myzset two
(integer) 1
redis 127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "one"
2) "1"      

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

redis 127.0.0.1:6379> zadd myzset2 1 "one"
(integer) 1
redis 127.0.0.1:6379> zadd myzset2 2 "two"
(integer) 1
redis 127.0.0.1:6379> zincrby myzset2 2 "one"
"3" //代表one的順序号變成了3
redis 127.0.0.1:6379> zrange myzset2 0 -1 withscores
1) "two"
2) "2"
3) "one"
4) "3"      

        zrank:傳回名稱為key的zset中member元素的排名(按score從小到大排序)即下标。

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "five"
8) "5"
redis 127.0.0.1:6379> zrank myzset3 two
(integer) 1 //two的下标是1(從0開始)      

        zrevrank:傳回名稱為key的zset中member元素的排名(按score從大到小排序)即下标。

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "five"
8) "5"
redis 127.0.0.1:6379> zrevrank myzset3 two
(integer) 2      

        zrevrange:傳回名稱為key的zset(按score從大到小順序)中的index從start到end的所有元素。

redis 127.0.0.1:6379> zrevrange myzset3 0 -1 withscores
1) "five"
2) "5"
3) "three"
4) "3"
5) "two"
6) "2"
7) "one"
8) "1"
redis 127.0.0.1:6379>       

        zrangebyscore:傳回集合中score在給定區間的元素。

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
redis 127.0.0.1:6379> zrangebyscore myzset3 2 3 withscores
1) "two"
2) "2"
3) "three"
4) "3"      

        zcount:傳回集合中score在給定區間的數量。

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "five"
8) "5"
redis 127.0.0.1:6379> zcount myzset3 2 3
(integer) 2      

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

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "five"
8) "5"
redis 127.0.0.1:6379> zcard myzset3
(integer) 4      

        zremrangebyrank:删除集合中排名在給定區間的元素。

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
redis 127.0.0.1:6379> zremrangebyrank myzset3 1 1
(integer) 1 //隻删除一個
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"      

        zremrangebyscore:删除集合中score在給定區間的元素。

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
redis 127.0.0.1:6379> zremrangebyscore myzset3 1 2
(integer) 2 //删除順序為1和2的
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "three"
2) "3"      

說明:本文是我網上學習LAMP兄弟連李捷老師《NoSQL資料庫之Redis資料庫管理》的學習筆記。