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

Redis五大基础数据类型命令详解与经典应用场景

文章目录前言一、 String字符串结构1.1 字符串常用操作命令1.2 原子加减操作1.3 核心应用场景二、 Hash哈希结构2.1 Hash 常用操作命令2.2 核心应用场景2.3 Hash 结构的优缺点分析三、 List列表类型3.1 List 常用操作命令3.2 经典数据结构组合模拟3.3 核心应用场景3.4 关键注意点四、 Set集合类型4.1 Set 常用基础操作4.2 Set 核心运算操作4.3 核心应用场景五、 ZSet有序集合类型5.1 ZSet 常用操作命令5.2 ZSet 高级集合运算操作5.3 核心应用场景实时热搜排行榜结语前言在当今的高并发、高性能系统架构中Redis 无疑是缓存与高并发组件里的中流砥柱。Redis 7 提供了非常丰富的数据结构用于应对各种复杂的业务场景。本篇文章将带你深度剖析 Redis 最核心、最基础的五大传统数据结构String字符串、Hash哈希、List列表、Set集合和ZSet有序集合全面解析它们的常用命令与经典应用场景。一、 String字符串结构String 是 Redis 中最简单、最基础、也是最常用的键值对数据类型。它的底层结构支持存储文本字符串、二进制数据以及数值。1.1 字符串常用操作命令SET key value存入一个字符串键值对。MSET key value [key value ...]批量存储多个字符串键值对。SETNX key value存入一个不存在的字符串键值对如果该键在数据库中已经存在则该操作不起任何作用并返回0。GET key获取指定字符串键的值。MGET key [key ...]批量获取多个字符串键的值。DEL key [key ...]删除一个或多个指定的键。EXPIRE key seconds设置一个键的过期时间单位为秒如果超过设定时间该键会自动过期失效在数据库中也将无法被访问。APPEND key value在已有键值的末尾追加指定的字符串内容。1.2 原子加减操作INCR key将 key 中存储的数字值原子加 1。DECR key将 key 中存储的数字值原子减 1。INCRBY key increment将 key 所存储的值加上指定的整数增量 increment。DECRBY key decrement将 key所存储的值减去指定的整数减量 decrement。1.3 核心应用场景单值缓存通过基本的SET key value或APPEND key value缓存一些全局变量、配置、或者基础 Token 数据。对象缓存整体 JSON 存取SET user:1 {name: roy, balance:1888}。多属性分离存取通过MSET user:1:name roy user:1:balance 1888批量管理对象字段配合MGET user:1:name user:1:balance进行高效读取。分布式锁利用SETNX product:10001 true来竞争锁。若返回 1 代表获取锁成功返回 0 则代表失败。业务执行完毕后通过DEL product:10001释放锁。在实际高并发业务中推荐引入原子过期的组合命令SET product:10001 true ex 10 nx以防止因为程序异常终止引发死锁问题。二、 Hash哈希结构Hash 结构是一个键值对集合它非常类似于 Java 中的HashMap或 Python 中的字典其内部由field和value组成非常适合用于存储结构化的对象。2.1 Hash 常用操作命令HSET key field value存储一个哈希表 key 中的 field 键值对。HSETNX key field value仅在哈希表 key 中不存在 field 时才存储该 field 键值对。HMSET key field value [field value ...]在一个哈希表 key 中同时存储多个 field-value 键值对。HGET key field获取哈希表 key 中指定 field 对应的值。HMGET key field [field ...]批量获取哈希表 key 中多个 field 对应的值。HDEL key field [field ...]删除哈希表 key 中的一个或多个 field 键值。HLEN key返回哈希表 key 中 field 的字段数量。HGETALL key返回哈希表 key 中所有的内部键值对包括 field 与 value。HINCRBY key field increment为哈希表 key 中指定的 field 字段的值加上整数增量 increment。2.2 核心应用场景对象缓存可以用HSET user:1 name roy balance 1888来单独存储并更新用户的各个独立属性利用HMGET user:1 name balance自由获取所需字段。也可以使用类似二维表的设计将多个对象聚合存储在一个大 Hash 表里。电商购物车业务设计以用户id为key商品id为field商品数量为value。添加商品HSET cart:1001 10088 1。增加数量HINCRBY cart:1001 10088 1。商品总数购物车总件数HLEN cart:1001。删除商品HDEL cart:1001 10088。获取购物车所有商品HGETALL cart:1001。2.3 Hash 结构的优缺点分析优点同类数据进行归类整合存储极大地方便了数据的维护与管理。相比 String 的多键操作对 CPU 和内存的消耗更小。相比于散落的 String 键Hash 存储结构更加紧凑更加节省空间。缺点Redis 的过期功能Expire不能直接应用在单个field上只能作用于整个主key。在 Redis 集群架构Cluster下由于 Hash 只能驻留在单台机器因而不适合大规模或极大数据量的堆积使用。三、 List列表类型List 类似一个有序的数据链表支持从左侧头部或右侧尾部插入或弹出元素并且具备两套索引体系正数索引从左往右从0开始负数索引从右往左从-1开始。3.1 List 常用操作命令LPUSH key value [value ...]将一个或多个值 value 插入到列表 key 的表头最左边。RPUSH key value [value ...]将一个或多个值 value 插入到列表 key 的表尾最右边。LPOP key移除并返回列表 key 的头元素最左侧元素。RPOP key移除并返回列表 key 的尾元素最右侧元素。LRANGE key start stop返回列表 key 中指定区间内的元素区间以偏移量 start 和 stop 指定。BLPOP key [key ...] timeout从列表表头弹出一个元素若列表中没有元素则会阻塞等待 timeout 秒如果设置 timeout 为 0则会一直阻塞等待直到有新数据加入。BRPOP key [key ...] timeout从列表表尾弹出一个元素若列表中没有元素则会阻塞等待 timeout 秒如果设置 timeout 为 0则会一直阻塞等待直到有新数据加入。3.2 经典数据结构组合模拟通过巧妙的命令组合List 可以非常简单地模拟出传统计算机科学里的核心数据结构Stack栈LPUSHLPOP先进后出Queue队列LPUSHRPOP先进先出Blocking MQ阻塞队列LPUSHBRPOP高并发阻塞式消息队列3.3 核心应用场景内容聚合流展示常常用于视频列表、长文章或签到列表的分页和按时间倒序拉取。业务流转如医院挂号、银行柜台排队机系统的底层任务排队以及各种简化版的轻量级 MQ 异步通信架构。3.4 关键注意点大 Key 问题一个 List 的极限容量虽然高达2 32 − 1 2^{32}-1232−1个元素约40亿但在实际企业应用开发中应严格防范大 Key避免单列表存储过多数据拖慢内存回收与持久化。性能损耗List 的底层在 Redis 7 内部表现为一个双向链表对两端双端的操作性能极高。但是如果企图通过索引下标直接访问或操作列表中间某个节点的数据如LINDEX等需要进行全表遍历此时性能就会比较低。四、 Set集合类型Redis 的 Set 类型是一个无序的、不可重复的字符串集合。它除了支持基础的增删改查以外还天生具备多集合之间的数学运算交、并、差集能力。4.1 Set 常用基础操作SADD key member [member ...]往集合 key 中存入元素如果元素已存在则会自动忽略若 key 不存在则新建一个集合。SREM key member [member ...]从集合 key 中删除一个或多个指定的元素。SMEMBERS key获取集合 key 中的所有元素。SCARD key获取集合 key 内部目前的元素总个数。SISMEMBER key member判断 member 元素是否存在于集合 key 当中。SRANDMEMBER key [count]从集合 key 中随机选出 count 个元素但不会从原集合中将元素删除。SPOP key [count]从集合 key 中随机抽选并弹出 count 个元素被选中的元素会从原集合中被彻底移除。4.2 Set 核心运算操作SINTER key [key ...]计算多个指定集合之间的交集运算。SINTERSTORE destination key [key ...]计算交集结果并将其持久化存入新集合 destination 中。SUNION key [key ...]计算多个指定集合之间的并集运算。SUNIONSTORE destination key [key ...]计算并集结果并将其持久化存入新集合 destination 中。SDIFF key [key ...]计算以第一个集合为主体的多个集合之间的差集运算。SDIFFSTORE destination key [key ...]计算差集结果并将其持久化存入新集合 destination 中。4.3 核心应用场景微信/平台抽奖小程序点击“参与抽奖”将用户 ID 加进集合SADD key {userID}。管理员查看所有参与抽奖的用户列表SMEMBERS key。开奖时抽取 count 名中奖者如果是允许重复中奖的不同奖项可用SRANDMEMBER key [count]若是不允许重复中奖的排他奖项则采用SPOP key [count]。微信、微博点赞、收藏与标签点赞文章SADD like:{消息ID} {用户ID}。取消点赞SREM like:{消息ID} {用户ID}。检查某个用户当前是否点过赞SISMEMBER like:{消息ID} {用户ID}。获取该消息所有点赞过的用户清单SMEMBERS like:{消息ID}。获取当前消息的总赞数SCARD like:{消息ID}。社交关系链计算交/并/差集应用共同关注的人通过SINTER set1 set2 set3完美找出多用户的重合交集。朋友圈/人脉圈的总和通过SUNION set1 set2聚合出所有好友的并集。你可能认识的人好友推荐通过SDIFF set1 set2计算出两用户好友列表的社交差集精准推荐潜在好友。五、 ZSet有序集合类型ZSetSorted Set是 Redis 极其精妙的一个高级数据类型。它保留了 Set 集合不能重复的特性但集合内的每个元素都必须关联一个浮点数分值score。Redis 内部会根据这个分值自动将集合内的元素进行从小到大的有序排列。5.1 ZSet 常用操作命令ZADD key score member [[score member] ...]往有序集合 key 中加入带有一个或多个分值的元素。ZREM key member [member ...]从有序集合 key 中删除指定的 member 元素。ZSCORE key member返回有序集合 key 中指定元素 member 关联的当前分值。ZINCRBY key increment member为有序集合 key 中指定的 member 元素的分值加上对应的增量 increment可以为整数或浮点数。ZCARD key返回有序集合 key 内部所包含的总体元素总个数。ZRANGE key start stop [WITHSCORES]按照分值从小到大的正序排列方式获取有序集合 key 中下标从 start 到 stop 区间内的元素带WITHSCORES选项会一并返回其分值。ZREVRANGE key start stop [WITHSCORES]按照分值从大到小的倒序排列方式获取有序集合 key 中下标从 start 到 stop 区间内的元素排行榜的核心命令。5.2 ZSet 高级集合运算操作ZUNIONSTORE destkey numkeys key [key ...]计算多个指定有序集合之间的并集并将得分求和/按配置计算后存入全新的有序集合 destkey 中。ZINTERSTORE destkey numkeys key [key ...]计算多个指定有序集合之间的交集并将重合元素的得分存入全新的有序集合 destkey 中。5.3 核心应用场景实时热搜排行榜ZSet 最经典的杀手级应用场景非“实时热度排行榜”莫属。以下是完整的业务逻辑流转闭环模型热度/点击量实时递增当某条新闻如 “守护香港”被用户点击或搜索时其热度权重自增 1ZINCRBY hotNews:201908191守护香港展示当日排行前十名的核心数据在网站或 App 首页需要展示当天热度最高的前 10 名索引 0 到 9按热度从大到小倒序输出ZREVRANGE hotNews:2019081909WITHSCORES跨时间维度的多日七日搜索榜单综合计算如果需要统计过去一整周7天的总排行可利用并集计算将 7 天的有序集合数据全部汇聚聚合到一个新集合中ZUNIONSTORE hotNews:20190813-201908197hotNews:20190813 hotNews:20190814 hotNews:20190815 hotNews:20190816 hotNews:20190817 hotNews:20190818 hotNews:20190819完美展示这七日综合热度排行前十的数据结果直接对刚刚汇聚而成的七日总集合进行倒序拉取即可直观呈现周榜单ZREVRANGE hotNews:20190813-2019081909WITHSCORES结语Redis五大基础数据类型各有其独特的结构优势与适用边界。精准选择String、Hash、List、Set或ZSet并规避大Key与集群限制等陷阱是构建高性能缓存架构的核心能力。
http://www.zskr.cn/news/1407709.html

相关文章:

  • Adobe Illustrator终极自动化工具集:25个免费脚本让设计效率飙升300%
  • AI+算法混合架构:10秒批量生成个性化宾果卡的技术实践
  • Unity小地图实战:从零到一,手把手教你打造一个可缩放、可展开的2D/3D游戏Minimap(含完整源码)
  • 为什么你的提问总被帮助中心“忽略”?揭秘ChatGPT知识库匹配逻辑与4步精准提问公式
  • 2026年 钢结构厂家/工程公司推荐榜单:辽宁/吉林钢结构施工,车间与建筑项目实力优选! - 品牌企业推荐师(官方)
  • GraphRAG【部署 01】Linux环境安装部署GraphRAG并使用Ollama本地大模型
  • 从FLV到HTML5:flv.js如何突破浏览器限制实现高效直播播放
  • 如何永久备份微信聊天记录?WeChatMsg完整数据留存方案指南
  • 个人工作室可以开通GEO优化吗
  • 拒绝浓重机器味!2026毕业论文降AI实操:打破模型底层逻辑
  • Agent 面试,项目是 20 分,讲项目是 80 分
  • GEO自然优化和付费推广区别
  • 2026西安财税咨询机构深度测评:3家主流财税对比! - 小柏云
  • 163MusicLyrics:3分钟掌握网易云和QQ音乐LRC歌词获取技巧
  • 第3讲 【大模型基础1】AI、机器学习、深度学习与大模型的关系
  • 目前口碑好的家政保洁品牌推荐
  • 别再用老掉牙的猫狗数据集了!用TensorFlow 2.1+Python 3.6,从数据清洗到模型调优的完整避坑指南
  • 2026年 大连电脑维修推荐榜:沙河口笔记本/台式机/服务器/戴尔联想惠普等品牌维修,专业高效口碑之选 - 品牌企业推荐师(官方)
  • 南沙大件搬迁怕摔?专业搬家公司防护运输更安全 - 从来都是英雄出少年
  • 视频去水印无损工具推荐:去水印后和原视频一样,2026实测最有效的方法 - 体验家
  • 【ChatGPT客户旅程地图实战指南】:20年CX专家亲授5大关键触点建模法,错过再等一年
  • 短视频团队已全面切换:ChatGPT脚本写作效能实测——人均日产能提升3.8倍,完播率平均+27.6%
  • 【限时公开】ChatGPT谜题响应率提升300%的底层协议——基于LLM推理链的6层提示压缩术
  • ChatGPT婚礼策划辅助落地全案(含提示词库+风险预警清单):已验证服务872对新人的真实数据复盘
  • 抖音内容采集终极指南:5分钟掌握批量下载的完整方案
  • vSAN双活数据中心延迟标准详解!阈值与优化规范
  • 第 1 篇:MCP 是什么?——AI 世界的“万能插座“
  • 低成本栅极电压调制方案:实现功率器件主动热控制与效率优化
  • 基于VDBA的无电阻浮地电感仿真器设计及其在滤波器中的应用
  • 2026年Q2昆明区域美术培训行业发展现状与本土优质机构梳理分析 - 云南美术头条