当前位置: 首页 > news >正文

Redis 7 中的 Set 和 Zset 使用

在 Redis 7 中,Set(集合)和 Zset(有序集合)是两种核心数据结构,用于高效存储和处理数据。Set 适用于无序且元素唯一的场景,而 Zset 则添加了分数(score)机制,支持有序操作。Redis 7 在性能上进行了优化,并引入了新命令(如 ZRANGESTORE)来增强功能。下面我将逐步解释它们的使用,包括基本概念、常用命令、使用场景和示例代码。所有示例基于 Redis 命令行格式。

1. Set(集合)

Set 是一个无序的字符串集合,元素唯一(不允许重复)。它适合存储无需排序的唯一项,如标签、用户好友列表或去重数据。

  • 常用命令

    • SADD key member [member ...]:添加一个或多个元素到集合。
    • SREM key member [member ...]:移除集合中的一个或多个元素。
    • SMEMBERS key:获取集合中的所有元素。
    • SISMEMBER key member:检查元素是否在集合中(返回 1 表示存在,0 表示不存在)。
    • SUNION key [key ...]:计算多个集合的并集。
    • SCARD key:获取集合的元素数量。
  • 使用场景

    • 标签系统:例如,存储文章的标签,确保每个标签唯一。
    • 好友关系:存储用户的互相关注列表。
    • 数据去重:快速检查重复项。
  • Redis 7 特性:Redis 7 对 Set 没有新增命令,但整体性能优化提升了命令执行速度(如 SADDSMEMBERS 在高并发下更高效)。

  • 示例代码

    // 添加元素到集合
    SADD tags "redis" "database" "nosql"// 检查元素是否存在
    SISMEMBER tags "redis"  // 返回 1// 获取所有元素
    SMEMBERS tags  // 输出: 1) "redis" 2) "database" 3) "nosql"// 移除元素
    SREM tags "nosql"
    SMEMBERS tags  // 输出: 1) "redis" 2) "database"// 计算元素数量
    SCARD tags  // 返回 2
    

2. Zset(有序集合)

Zset 是一个有序的字符串集合,每个元素关联一个分数(score),用于排序。元素唯一,但分数可以重复。它适合需要排序的场景,如排行榜或优先级队列。

  • 常用命令

    • ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]:添加元素并指定分数(选项如 NX 仅添加新元素)。
    • ZREM key member [member ...]:移除一个或多个元素。
    • ZRANGE key start stop [WITHSCORES]:获取指定范围内的元素(按分数升序)。
    • ZREVRANGE key start stop [WITHSCORES]:获取指定范围内的元素(按分数降序)。
    • ZSCORE key member:获取元素的分数。
    • ZRANK key member:获取元素的升序排名(从 0 开始)。
    • ZCARD key:获取集合的元素数量。
  • Redis 7 新特性

    • ZRANGESTORE dst src min max [BYSCORE|BYLEX] [REV] [LIMIT offset count]:将源 Zset 的指定范围存储到新键中(例如,复制排行榜的前 10 名)。这是 Redis 7 新增的命令,提高了数据操作效率。
    • 性能优化:分数比较和范围查询更快,尤其在大型数据集上。
  • 使用场景

    • 排行榜:例如,游戏分数排名,元素为用户 ID,分数为得分。
    • 优先级队列:任务调度,分数表示优先级。
    • 时间序列:分数作为时间戳,按时间顺序检索数据。
  • 示例代码

    // 添加元素并指定分数
    ZADD leaderboard 100 "user1" 200 "user2" 150 "user3"// 获取升序排名(分数从低到高)
    ZRANGE leaderboard 0 -1 WITHSCORES  
    // 输出: 1) "user1" 2) "100" 3) "user3" 4) "150" 5) "user2" 6) "200"// 获取元素的分数
    ZSCORE leaderboard "user2"  // 返回 "200"// 使用 Redis 7 新命令 ZRANGESTORE:复制前 2 名到新键
    ZRANGESTORE top2 leaderboard 0 1 BYSCORE  // 将 leaderboard 中分数最低的两个元素存储到 top2
    ZRANGE top2 0 -1 WITHSCORES  // 输出: 1) "user1" 2) "100" 3) "user3" 4) "150"// 移除元素
    ZREM leaderboard "user1"
    ZCARD leaderboard  // 返回 2
    

3. Set 和 Zset 的选择建议
  • 使用 Set:当数据无需排序且需要唯一性时优先选择,例如存储用户兴趣标签, 它更轻量。
  • 使用 Zset:当数据需要基于分数排序时选择,例如实时排行榜。命令复杂度略高,但支持灵活的范围查询。
  • Redis 7 优势:整体性能提升,Zset 的新命令如 ZRANGESTORE 简化了数据迁移,适合生产环境的高效操作。

在实际应用中,结合具体需求选择结构:如果只关心存在性,用 Set;如果需要排序,用 Zset。测试命令时,建议使用 Redis CLI 或客户端库(如 Python 的 redis-py)。

http://www.dtcms.com/a/313418.html

相关文章:

  • 基于transformer的目标检测——匈牙利匹配算法
  • 深入解析HashMap:原理与性能优化
  • Vim编辑器详解:从入门到高效使用
  • 从零开始的CAD|CAE开发: LBM源码实现分享
  • 编程语言分类
  • JAVAEE--5.多线程之常见的锁策略
  • AI Competitor Intelligence Agent Team
  • 【openlayers框架学习】七:绘制线要素以及点击画线功能
  • 力扣热题100----------141.环形链表
  • 基于BiLSTM+CRF实现NER
  • 【机器人】VLN-R1 微调 | 增强训练 | 连续导航
  • Web3合约ABI,合约地址生成部署调用及创建,连接钱包,基础交易流程
  • ARPO:让LLM智能体更高效探索
  • 【Linux网络编程基础--socket地址API】
  • 多 4G 通讯模组共存时的干扰问题深度解析与解决方案
  • leecode-每日一题-2106. 摘水果
  • vmfusion启动centos6.10 一直卡到call 169.254.169.254
  • 全面解析 BGE Embedding 模型:训练方式、模型系列与实战用法
  • Redis——常用指令汇总指南(三)(哈希类型)
  • 编写xsync集群分发脚本(保姆级别)
  • Redis 数据同步机制
  • 【Linux】Makefile Cmake—基操
  • [特殊字符]字节Get!免费进楼攻略速存[特殊字符]
  • LWIP从FreeRTOS到uC/OS-III的适配性改动
  • linux 扩展未分配的磁盘空间到home下
  • SQL157 更新记录(一)
  • 代码随想录算法训练营第五十八天|动态规划part8
  • 成功解决ImportError: DLL load failed while importing _multiarray_umath: 找不到指定的模块。
  • 深度学习中的模型知识蒸馏
  • 深度学习中卷积与互相关