您的位置:首页 > 汽车 > 时评 > 08 Redis Set类型操作与使用场景

08 Redis Set类型操作与使用场景

2024/11/15 20:15:15 来源:https://blog.csdn.net/weixin_48089507/article/details/140896541  浏览:    关键词:08 Redis Set类型操作与使用场景

Redis Set类型操作与使用场景

一、Set类型操作

​ Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

​ 无序

​ 元素不可重复

​ 查找快

​ 支持交集、并集、差集等功能

​ Set的常见命令有:

​ SADD key member … :向set中添加一个或多个元素

# 添加多个值
127.0.0.1:6379> sadd user:1:friends bob jack job
3

​ SMEMBERS:获取set中的所有元素

# 获取元素
127.0.0.1:6379> smembers user:1:friends
job
bob
jack

​ SCARD key: 返回set中元素的个数

# 返回元素数量
127.0.0.1:6379> scard user:1:friends
3

​ SISMEMBER key member:判断一个元素是否存在于set中

# 判断是否存在bob(返回1为存在)
127.0.0.1:6379> sismember user:1:friends bob
1# 判断是否存在hony(返回0为不存在)
127.0.0.1:6379> sismember user:1:friends hony
0

​ SREM key member … : 移除set中的指定元素

# 删除元素job
127.0.0.1:6379> srem user:1:friends job
1# 查看是否删除
127.0.0.1:6379> smembers user:1:friends
bob
jack

​ SINTER key1 key2 … :求key1与key2的交集

# 创建3个元素
127.0.0.1:6379> sadd user:2:friends bob li hony
3# 交集
127.0.0.1:6379> sinter user:1:friends user:2:friends
bob

​ SDIFF key1 key2 … :求key1与key2的差集

# 查询用户1的差集
127.0.0.1:6379> sdiff user:1:firends user:2:friends
jack# 查询用户2的差集
127.0.0.1:6379> sdiff user:2:friends user:1:friends
hony
li

​ SUNION key1 key2 … :求key1与key2的并集

# 并集
127.0.0.1:6379> sunion user:1:friends user:2:friends
bob
hony
jack
li

​ 例如两个集合:s1和s2:

在这里插入图片描述

​ 求交集:SINTER s1 s2

​ 求s1与s2的不同:SDIFF s1 s2

在这里插入图片描述

二、使用场景

​ Set类型在Redis中主要用于存储无序且不重复的数据集合,以下是几个典型的使用场景:

共同好友/关注列表:

​ 在社交类应用中,获取两个人或多个人的共同好友或共同关注的用户,是一个常见的需求。使用Set类型可以方便地实现这个功能,只需要将每个人的好友或关注的用户ID存储在一个Set中,然后通过求交集的操作就可以得到共同好友或关注的用户列表。

标签系统:

​ 在一些需要给用户打标签的应用中,比如电商网站的商品标签、博客的标签等,每个用户可能有多个标签,而且标签之间是不重复的。这时候就可以用Set类型来存储用户的标签,方便地添加、删除和查询标签。

唯一性校验:

​ 有些场景中需要保证数据的唯一性,比如用户注册时输入的手机号或邮箱,不能重复。这时候可以用Set类型来存储已经注册过的手机号或邮箱,当用户再次输入时,只需要判断输入的值是否在Set中即可。

随机推荐:

​ 在一些需要随机展示内容的场景中,比如首页的推荐内容,可以先将需要展示的内容ID存储在一个Set中,然后随机从Set中选取几个ID来展示。这样可以保证每次展示的内容都是随机的,而且不会重复。

IP地址去重:

​ 在一些需要记录用户访问IP的应用中,比如网站访问统计、API调用次数统计等,可以使用Set类型来存储访问过的IP地址,这样可以方便地获取到去重后的IP地址列表和数量。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com