redis set结构在工作中你有哪些业务场景用到了?
1 个回答
浪漫固然重要,但真诚更胜一筹。凤凰Redis Set 是一个无序的、不重复的集合,基于哈希表实现,查找、添加、删除效率高。 下面是我在工作中实际用到 Redis Set 的典型业务场景和实践: ## 一、去重场景(最常用) **场景特点**: - 存储的数据不重复 - 需要快速判断元素是否存在(去重检查) **具体业务举例**: - 电商平台防止用户重复参与营销活动(如抽奖、秒杀)。 - 数据清洗时快速去除重复ID。 **示例**: ```shell # 用户参与抽奖活动去重 SADD activity:user:join:1001 userId12345 # 判断用户是否参与过 SISMEMBER activity:user:join:1001 userId12345 ``` ## 二、标签管理和分类查询 **场景特点**: - 快速实现“根据标签查询相关联的对象” - 快速计算标签之间的关系(交集、并集) **具体业务举例**: - 内容(文章、商品)按标签分类管理,如「数码产品」「新品」「促销」等标签。 - 用户兴趣标签系统,快速计算用户间的共同兴趣。 **示例**: ```shell # 给文章或商品添加标签 SADD tag:新品 item_1001 item_1002 item_1003 SADD tag:促销 item_1002 item_1004 # 查询既是新品又是促销的商品(交集) SINTER tag:新品 tag:促销 ``` ## 三、社交关系、关注关系管理 **场景特点**: - 社交系统中,快速实现用户关注、取关、好友列表管理。 **具体业务举例**: - 微博、社区等的关注/粉丝关系存储。 - 即时通讯应用的好友列表管理。 **示例**: ```shell # 用户1001关注了用户2001 SADD user:1001:followings 2001 SADD user:2001:followers 1001 # 判断1001是否关注了2001 SISMEMBER user:1001:followings 2001 # 获取共同关注好友(交集) SINTER user:1001:followings user:1002:followings ``` ## 四、随机抽取场景(抽奖或推荐) **场景特点**: - 需要快速随机选取元素(Set的SRANDMEMBER) **具体业务举例**: - 从候选用户池随机抽取中奖用户。 - 推荐系统随机抽取部分数据用于个性化推荐(避免过于单一)。 **示例**: ```shell # 添加参与抽奖用户 SADD lottery:event001 user1 user2 user3 user4 user5 # 随机抽取2个中奖用户 SRANDMEMBER lottery:event001 2 ``` ## 五、黑名单(快速检查是否存在) **场景特点**: - 黑名单检查需要快速且频繁,避免重复。 **具体业务举例**: - 用户访问限制(如恶意IP黑名单、用户黑名单)。 - 短信、邮件营销中,快速过滤黑名单用户。 **示例**: ```shell # 添加黑名单用户 SADD blacklist:users user1001 user1002 # 快速判断用户是否在黑名单 SISMEMBER blacklist:users user1001 ``` ## 六、权限集合管理 **场景特点**: - 快速判断用户是否拥有某个权限。 **具体业务举例**: - 用户角色权限系统。 **示例**: ```shell # 为角色添加权限 SADD role:admin:permissions edit delete audit # 检查用户是否具有某权限 SISMEMBER role:admin:permissions audit ``` ## 七、在线用户统计或活跃用户统计 **场景特点**: - 需要快速插入、删除、统计在线用户。 - 性能要求高,精确度要求不高(粗粒度统计)。 **具体业务举例**: - 实时统计某个聊天室在线用户。 - 粗粒度统计每日活跃用户。 **示例**: ```shell # 用户进入聊天室 SADD chatroom:room1001:online user123 # 用户退出聊天室 SREM chatroom:room1001:online user123 # 实时统计在线用户数 SCARD chatroom:room1001:online ``` ## 八、快速实现简单的数据交并差集运算 **场景特点**: - 适合快速对数据进行集合运算,分析数据之间的关联关系。 **具体业务举例**: - 快速对比两批数据的差异(如新旧用户差异分析)。 **示例**: ```shell # 今天活跃用户 vs 昨天活跃用户,找出今天新增用户 SDIFF active_users:today active_users:yesterday ``` ## 推荐程度表(经验总结): | 场景 | 推荐程度 | 理由 | |-----------------|----------|-------------------------------| | 去重 | ⭐⭐⭐⭐⭐ | 最常用,高性能且易用 | | 标签管理 | ⭐⭐⭐⭐⭐ | 快速、灵活 | | 社交关系管理 | ⭐⭐⭐⭐⭐ | 非常适合关系链管理 | | 随机抽取 | ⭐⭐⭐⭐ | 简单方便 | | 黑名单检查 | ⭐⭐⭐⭐ | 性能高,查找速度快 | | 权限管理 | ⭐⭐⭐⭐ | 简单高效,快速检查权限 | | 在线用户统计 | ⭐⭐⭐ | 性能高,但内存占用相对较大 | | 数据交并差运算 | ⭐⭐⭐ | 偶尔使用,分析快速 |发布于 2025-03-06 13:50 •IP属地 山东举报评论收藏
公众号进入网站体验更佳

