redis set一般什么场景下使用?

1 个回答

  • 小医仙
    自己喜欢的东西又何必问别人好不好
    Redis 的 `set` 是一种无序集合数据结构,具有自动去重的特性,支持高效的集合操作(如交集、并集、差集)。以下是常见场景及使用案例: ### **1. 标签管理或唯一性约束** **场景**:需要存储去重的数据集合,如用户兴趣标签、在线用户等。 **优势**:自动去重,查询是否存在某元素效率高。 **示例代码**: ```bash # 添加标签 SADD user_tags "sports" "music" "travel" # 检查某标签是否存在 SISMEMBER user_tags "music" # 返回 1(存在) # 获取所有标签 SMEMBERS user_tags # 返回 ["sports", "music", "travel"] ``` ### **2. 实时在线用户管理** **场景**:需要存储一组实时在线的用户 ID,且用户 ID 不允许重复。 **优势**:快速添加、删除和判断用户是否在线。 **示例代码**: ```bash # 用户上线 SADD online_users "user1" "user2" # 用户下线 SREM online_users "user2" # 判断用户是否在线 SISMEMBER online_users "user2" # 返回 0(不在线) # 获取当前所有在线用户 SMEMBERS online_users # 返回 ["user1"] ``` ### **3. 共同好友、共同兴趣计算** **场景**:社交网络中计算两个用户的共同好友或兴趣。 **优势**:高效计算交集。 **示例代码**: ```bash # 用户 A 的好友 SADD friends_user_a "user2" "user3" "user4" # 用户 B 的好友 SADD friends_user_b "user3" "user4" "user5" # 计算共同好友 SINTER friends_user_a friends_user_b # 返回 ["user3", "user4"] ``` ### **4. 去重** **场景**:快速判断某元素是否已处理或出现,避免重复操作。 **示例代码**: ```bash # 添加已处理任务 SADD processed_tasks "task1" # 检查任务是否已处理 SISMEMBER processed_tasks "task1" # 返回 1(已处理) ``` ### **5. 随机抽奖或抽样** **场景**:从一组用户中随机抽取若干用户。 **优势**:支持随机抽取操作。 **示例代码**: ```bash # 添加抽奖用户 SADD lottery_users "user1" "user2" "user3" "user4" # 随机抽取一名用户 SRANDMEMBER lottery_users # 返回 "user2" # 随机抽取并移除一名用户 SPOP lottery_users # 返回 "user3" ``` ### **6. 权限系统** **场景**:用户或角色权限管理。 **优势**:快速检查用户是否具有某权限。 **示例代码**: ```bash # 添加用户权限 SADD user_permissions "read" "write" # 检查是否有某权限 SISMEMBER user_permissions "write" # 返回 1(有权限) ``` ### **7. 唯一访问用户统计** **场景**:统计网站的独立访客数(UV)。 **优势**:直接存储用户 ID,自动去重。 **示例代码**: ```bash # 用户访问 SADD unique_visitors "user1" "user2" "user1" # 获取独立访客数量 SCARD unique_visitors # 返回 2(独立访客数) ``` ### **8. 黑名单或白名单管理** **场景**:存储需要拦截或允许的用户、IP 地址等。 **示例代码**: ```bash # 添加黑名单 SADD blacklist "192.168.1.1" "192.168.1.2" # 检查 IP 是否在黑名单中 SISMEMBER blacklist "192.168.1.1" # 返回 1(在黑名单中) ``` ### **总结** Redis 的 `set` 适合需要去重的场景以及涉及集合操作的需求,如**在线用户管理**、**去重**、**权限管理**等。其高效的集合运算(交、并、差集)使其在社交网络和实时系统中应用广泛。
    发布于 2024-12-18 05:34 •IP属地 河南
    举报
    评论
    收藏