redis 的set(集合)类型的使用和应用场景

Redis集合(Set)是无序且不重复的数据结构,基于哈希表实现,支持快速添加、删除和查找操作。本文介绍了集合的基本使用,如`sadd`、`smembers`、`srem`和`scard`命令,并探讨了集合在标签系统、共同好友功能和统计独立IP等场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Redis 集合(Set)

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

集合对象的编码可以是 intset 或者 hashtable。

Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

二、基本使用

sadd:添加一个元素到集合中(集合中的元素无序的并且唯一)

redis 127.0.0.1:6379> SADD runoobkey redis
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mongodb
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mysql
(integer) 1
redis 127.0.0.1:6379> SADD runoobkey mysql
(integer) 0
redis 127.0.0.1:6379> SMEMBERS runoobkey

1) "mysql"
2) "mongodb"
3) "redis"

2.smembers:查看集合中所有的元素

3.srem:删除结合中指定的元素

4.scard:返回集合元素的数量

三、redis set集合常用的应用场景

redis set是集合类型的数据结构,那么集合类型就比较适合用于聚合分类。

1、标签:比如我们博客网站常常使用到的兴趣标签,把一个个有着相同爱好,关注类似内容的用户利用一个标签把他们进行归并。

2、共同好友功能,共同喜好,或者可以引申到二度好友之类的扩展应用。

3、统计网站的独立IP。利用set集合当中元素唯一性,可以快速实时统计访问网站的独立IP。

### Redis Set 类型应用场景 #### 缓存去重 由于 `Set` 是无序且唯一性的集合,因此非常适合用于缓存系统中的去重操作。当需要确保某些数据项只被处理一次时,可以利用 `Set` 来实现这一点[^1]。 ```python import redis r = redis.Redis() # 添加元素到 set 中 r.sadd('unique_items', 'item_1') r.sadd('unique_items', 'item_2') # 尝试再次添加相同的元素不会成功 r.sadd('unique_items', 'item_1') print(r.smembers('unique_items')) # 只会显示 unique 的成员 {'item_1', 'item_2'} ``` #### 社交网络的好友关系管理 社交平台中好友列表通常是没有顺序的,并且每个人只能有一个相同的朋友记录;此时就可以采用 `Set` 来保存用户的关注者或粉丝名单[^3]。 ```python # 用户 A 关注 B C r.sadd('following:user_a', 'user_b') r.sadd('following:user_a', 'user_c') # 查询用户 A 所有正在关注的人 followers_of_A = r.smembers('following:user_a') print(followers_of_A) # 输出: {'user_b', 'user_c'} # 检查某个人是否已经被关注过 is_following_B = r.sismember('following:user_a', 'user_b') print(is_following_B) # True 如果已经存在则返回 true 否则 false ``` #### 记录在线状态 通过将登录系统的用户 ID 加入到一个名为 “online_users”的 `Set` 集合里来追踪当前处于活跃状态下的所有客户端连接情况。每当有新的访问请求到来时就更新这个集合的内容以便于实时统计在线人数等信息[^4]。 ```python # 当用户上线时加入 online_users set r.sadd('online_users', user_id) # 下线时移除对应的 id r.srem('online_users', user_id) current_online_count = r.scard('online_users') # 获取当前在线数量 print(current_online_count) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值