set和zset都是集合
set是對string類型的無序集合,zset是有序的集合
set中的值是不能重復的;
| 是否是集合 | 是否有序 | 有序實現方式 | 應用場景 | |
| set | 是 | 否 | 無 | 標簽,社交 |
| zset | 是 | 是 | 分值 | 排行系統,社交 |
一,set常用指令
set是不允許有重復的值存在的。
1)sadd和smembers t添加set和獲取set中的值
2) sismember 還可以判斷set中是否包含某個字符串
127.0.0.1:6379> sadd s laoli (integer) 1 127.0.0.1:6379> sadd s laowang (integer) 1 127.0.0.1:6379> sadd s laozhang (integer) 1 127.0.0.1:6379> sadd s laohao (integer) 1 127.0.0.1:6379> SMEMBERS s 1) "laohao" 2) "laowang" 3) "laozhang" 4) "laoli"
127.0.0.1:6379> SMEMBERS s 1) "laohao" 2) "laowang" 3) "laozhang" 4) "laoli" 127.0.0.1:6379> SISMEMBER s laohao (integer) 1 127.0.0.1:6379> SISMEMBER s laohao1 (integer) 0
3)scard 返回集合中的元素總數
127.0.0.1:6379> SMEMBERS s 1) "laohao" 2) "laowang" 3) "laozhang" 4) "laoli" 127.0.0.1:6379> scard s (integer) 4
4)srem移除集合中的一個或多個字符串
127.0.0.1:6379> SMEMBERS s 1) "laohao" 2) "laowang" 3) "laozhang" 4) "laoli" 127.0.0.1:6379> srem s laohao laoli (integer) 2 127.0.0.1:6379> SMEMBERS s 1) "laozhang" 2) "laowang"
5)srandmember 隨機抽取集合中的一個或者多個元素
127.0.0.1:6379> SMEMBERS s
1) "laowang"
2) "laok"
3) "laozhang"
4) "laoli"
5) "laob"
127.0.0.1:6379> SRANDMEMBER s 1
1) "laowang"
127.0.0.1:6379> SRANDMEMBER s 1
1) "laob"
127.0.0.1:6379> SRANDMEMBER s 1
1) "laozhang"
127.0.0.1:6379> SRANDMEMBER s 2
1) "laozhang"
2) "laoli"
6)spop 移除並返回集合中的一個隨機元素
spop 應該是隨機移除集合中的一個元素並且返回一個移除的值
127.0.0.1:6379> SMEMBERS s 1) "laozhang" 2) "laowang" 3) "laoli" 4) "laok" 5) "laob" 127.0.0.1:6379> spop s "laob" 127.0.0.1:6379> spop s "laowang" 127.0.0.1:6379> SMEMBERS s 1) "laozhang" 2) "laoli" 3) "laok"
7)smove 將一個set中的元素移動到另一個set中
比如,講s中的test移動到s1中
比如在抽獎系統中,講一等獎中獎用戶放到一等獎的名單中,二等獎的用戶放在二等獎的名單中。
127.0.0.1:6379> SMEMBERS s 1) "laohao" 2) "laozhang" 3) "test" 4) "laowang" 5) "laoli" 6) "laok" 127.0.0.1:6379> SMEMBERS s1 1) "laojiao" 2) "laowang" 3) "laozhang" 4) "laoli" 127.0.0.1:6379> smove s s1 test (integer) 1 127.0.0.1:6379> SMEMBERS s1 1) "laojiao" 2) "laowang" 3) "laozhang" 4) "laoli" 5) "test"
8)set是一個集合,肯定會有交集,並集和差集;
sdiff 查看兩個集合不同的元素--差集
sinter 查看兩個集合中相同的元素---交集
sunion 兩個集合中所有的元素---並集
127.0.0.1:6379> SMEMBERS s 1) "laohao" 2) "laozhang" 3) "laowang" 4) "laoli" 5) "laok" 127.0.0.1:6379> SMEMBERS s1 1) "laojiao" 2) "laowang" 3) "laozhang" 4) "laoli" 5) "test" 127.0.0.1:6379> sdiff s s1 1) "laohao" 2) "laok" 127.0.0.1:6379> SINTER s s1 1) "laozhang" 2) "laowang" 3) "laoli" 127.0.0.1:6379> SUNION s s1 1) "laohao" 2) "laozhang" 3) "laojiao" 4) "test" 5) "laowang" 6) "laoli" 7) "laok"
二,zset的常用指令
1)zadd和zrange
zadd是添加元素
zrange是查看元素
127.0.0.1:6379> zadd s 1 laoli (integer) 1 127.0.0.1:6379> zadd s 2 laowang (integer) 1 127.0.0.1:6379> zadd s 3 laozhang (integer) 1 127.0.0.1:6379> zadd s 4 laoxu (integer) 1 127.0.0.1:6379> zrange s 0 -1 1) "laoli" 2) "laowang" 3) "laozhang" 4) "laoxu"
2)zset的排序指令
首先,我們賦值,比如下面的 語文分數
127.0.0.1:6379> zadd score_ch 98 laozhang (integer) 1 127.0.0.1:6379> zadd score_ch 95 laoli (integer) 1 127.0.0.1:6379> zadd score_ch 93 laowang (integer) 1 127.0.0.1:6379> zadd score_ch 89 laohao (integer) 1
①ZRANGEBYSCORE 從低到高排序,從數值中可以看到laohao的值分數最低
127.0.0.1:6379> ZRANGEBYSCORE score_ch -inf +inf 1) "laohao" 2) "laowang" 3) "laoli" 4) "laozhang"
127.0.0.1:6379> ZRANGEBYSCORE score_ch -inf +inf withscores 1) "laohao" 2) "89" 3) "laowang" 4) "93" 5) "laoli" 6) "95" 7) "laozhang" 8) "98"
可以查看區間分數,如果不存在的話,就返回empty,如果存在就返回存在區間的值;有集合的地方,總會有區間;
127.0.0.1:6379> ZRANGEBYSCORE score_ch 1 2 (empty list or set) 127.0.0.1:6379> ZRANGEBYSCORE score_ch 80 94 1) "laohao" 2) "laowang"
127.0.0.1:6379> ZRANGEBYSCORE score_ch 80 94 withscores 1) "laohao" 2) "89" 3) "laowang" 4) "93"
②zrem 移除集合中 的指定元素
127.0.0.1:6379> zrange score_ch 0 -1
1) "laohao"
2) "laowang"
3) "laoli"
4) "laozhang"
127.0.0.1:6379> zrem score_ch laozhang laohao
(integer) 2
127.0.0.1:6379> zrange score_ch 0 -1
1) "laowang"
2) "laoli"
③zrevrange 從高到底排序
127.0.0.1:6379> zrevrange score_ch 0 -1 withscores
1) "laoli"
2) "95"
3) "laowang"
4) "93"
④zcount 判斷集合區間中有多少值
127.0.0.1:6379> zrange score_ch 0 -1 withscores 1) "sun" 2) "56" 3) "ke" 4) "57" 5) "liu" 6) "65" 7) "laowang" 8) "93" 9) "laoli" 10) "95" 127.0.0.1:6379> zcount score_ch 50 60 (integer) 2
指令可以看出50到60之間的有兩個值;
三,應用場景
1,zset是可以排序的,我們可以做閱讀量排行,加權判斷,熱門等等;
2,set和zset是一個集合,可以在集合中給用戶打不同的標簽,多個用戶中找相同點,做好友推薦;共同好友等等;
比如,微博中的共同關注等等
127.0.0.1:6379> SMEMBERS s1) "laohao"2) "laozhang"3) "test"4) "laowang"5) "laoli"6) "laok"127.0.0.1:6379> SMEMBERS s11) "laojiao"2) "laowang"3) "laozhang"4) "laoli"127.0.0.1:6379> smove s s1 test(integer) 1127.0.0.1:6379> SMEMBERS s11) "laojiao"2) "laowang"3) "laozhang"4) "laoli"5) "test"
