四,redis常用的数据类型--set和zset

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"

原文地址:https://www.cnblogs.com/invban/p/14202868.html