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資料庫管理》的學習筆記。