【Redis】Redis的五种核心数据类型详解

张开发
2026/4/10 2:33:09 15 分钟阅读

分享文章

【Redis】Redis的五种核心数据类型详解
目录一. String字符串1. 核心介绍2. 常用命令3. 最佳使用场景二、Hash哈希1. 核心介绍2. 常用命令3. 最佳使用场景三、List列表1. 核心介绍2. 常用命令3. 最佳使用场景四、Set集合1. 核心介绍2. 常用命令3. 最佳使用场景五、ZSetSorted Set 有序集合1. 核心介绍2. 常用命令3. 最佳使用场景一. String字符串1. 核心介绍String 是 Redis 最基础、最常用的数据类型采用「key-value」键值对形式存储一个 key 对应一个 value。其灵活性极高。2. 常用命令# 1. 基础读写最常用 SET name 小明 # 设置键值对简单好记 GET name # 获取值返回小明 DEL name # 删除键值对删除name # 2. 过期时间缓存场景必备 SETEX age 60 20 # 设置带过期时间的键值对age2060秒后过期 PSETEX count 5000 10 # 毫秒级过期count105秒后过期 # 3. 数值操作原子性高并发安全 INCR count # 整数自增1count从0变成1 DECR stock # 整数自减1stock从10变成9 INCRBY point 5 # 自增指定数值point加5 # 4. 分布式锁核心命令 SETNX lock 1 # 不存在则设置获取锁 #执行 SETNX lock 1 时Redis 会先检查有没有一个叫「lock」的键 如果没有不存在 就创建这个 key设置 value 为 1命令返回 1表示「获取锁成功」 如果有已存在 什么都不做命令返回 0表示「获取锁失败」。3. 最佳使用场景String 通用性极强以下是 4 个最常见的生产场景覆盖缓存、计数、分布式锁等核心需求缓存场景存储高频访问的数据减轻数据库压力比如用户姓名、商品名称、系统配置等示例SET name 小明计数器场景实现高并发下的计数比如文章阅读量、视频播放量、点赞数、库存计数分布式锁场景利用 SETNX 指令实现分布式环境下的锁机制解决并发修改问题如订单创建、库存扣减临时数据存储存储短信验证码、临时令牌、会话信息等配合过期时间自动清理无效数据。二、Hash哈希1. 核心介绍Hash 类型是 String 类型的「升级款」本质是「key - field - value」的三层结构一个顶层 key 对应一个哈希表哈希表中包含多个 field字段每个 field 对应一个 value值。KEYVALUEfieldvalueUser:1namezhangsanage21User:2namelisiage322. 常用命令Hash 命令均以 H 开头搭配用户对象案例方便理解和实操# 1. 基础操作设置/获取单个字段 HSET student name 小红 # 设置字段学生姓名小红 HGET student name # 获取字段返回小红 # 2. 批量操作设置/获取多个字段 HMSET student age 18 sex 女 # 批量设置年龄18、性别女 HMGET student age sex # 批量获取返回18、女 # 3. 获取所有字段和值 HGETALL student # 返回所有字段和值查看完整学生信息 # 4. 数值操作原子性 HINCRBY student age 1 # 字段值自增年龄加1变成19 HINCRBYFLOAT student score 2.5 # 浮点型自增分数加2.5 # 5. 字段判断与删除 HEXISTS student sex # 判断字段是否存在返回1存在0不存在 HDEL student sex # 删除字段删除性别字段3. 最佳使用场景Hash 类型的核心优势是「结构化存储、单个字段操作」以下是 3 个最常见的生产场景结构化对象存储这是 Hash 最常用的场景存储用户、商品、订单等结构化数据。相比 String 类型无需序列化 JSON可单独修改某个字段如只更新用户年龄且节省内存购物车场景电商项目中购物车可通过 Hash 实现快速添加、修改、删除商品配置项存储存储系统配置、接口参数等一组相关的配置项可单独修改某个配置无需重新设置整个配置集。三、List列表1. 核心介绍Redis List 是一个「有序、可重复」的字符串列表核心特点是「按插入顺序排序」——从左边插入的元素排在最前面从右边插入的元素排在最后面支持从两端插入、弹出元素操作灵活。基于这个特性List 可以轻松实现两种数据结构队列FIFO左进右出LPUSH RPOP适合消息队列栈LIFO左进左出LPUSH LPOP适合临时存储、回溯场景。List 的长度没有限制只要内存足够元素可以重复这也是它和 Set 类型的核心区别。2. 常用命令List 命令均以 L/R 开头L左leftR右right搭配消息队列案例方便实操# 1. 插入操作核心 LPUSH list a b # 从左边插入元素插入a和b RPUSH list c d # 从右边插入元素插入c和d # 2. 弹出操作核心 LPOP list # 从左边弹出元素返回b RPOP list # 从右边弹出元素返回d RPOPLPUSH list newlist # 从list右边弹出插入newlist左边 # 3. 查看操作 LRANGE list 0 -1 # 获取所有元素查看list里的全部内容 LLEN list # 获取列表长度查看list有多少个元素 # 4. 修剪操作常用 LTRIM list 0 1 # 只保留前2个元素删除其他元素3. 最佳使用场景List 类型的核心优势是「有序、两端操作高效」以下是 3 个最常见的生产场景消息队列利用 List 的「左进右出LPUSH RPOP」特性实现简单的生产者-消费者模型适合低并发、非核心业务的消息队列如通知、日志收集。可通过 RPOPLPUSH 命令实现消息备份避免消息丢失社交时间线在朋友圈、微博等社交场景中用户的动态列表时间线可通过 List 实现——用户发布新动态时用 LPUSH 插入列表保证最新动态在最前面用 LRANGE 分页查询最新 N 条数据列表存储系统的最新消息、最新订单、最新评论等用 LTRIM 命令保留最近 N 条数据避免列表过长占用内存如存储最近 100 条系统日志。四、Set集合1. 核心介绍Redis Set 是一个「无序、不可重复」的字符串集合核心特点有两个无序元素没有固定顺序不能通过索引获取和 List 相反不可重复同一个元素只能存一次自动去重插入重复元素会被忽略。Set 支持多种集合运算比如交集共同元素、并集所有元素、差集差异元素这些运算都是 Redis 内部优化实现效率极高无需手动编写复杂逻辑。核心价值高效去重 集合运算适合去重统计、社交关系、抽奖等场景。2. 常用命令Set 命令均以 S 开头搭配社交、去重案例方便实操# 1. 基础操作添加/删除/查询 SADD fruit1 苹果 香蕉 橘子 # 添加元素自动去重 SMEMBERS fruit1 # 获取所有元素 SREM fruit1 橘子 # 删除指定元素 SISMEMBER fruit1 苹果 # 判断元素是否存在 SCARD fruit1 # 获取元素个数 # 2. 随机操作抽奖常用 SPOP fruit1 1 # 随机弹出1个元素删除 SRANDMEMBER fruit1 2 # 随机获取2个元素不删除 # 3. 集合运算核心 SADD fruit1 苹果 香蕉 橘子 # 添加元素自动去重 SADD fruit2 香蕉 葡萄 # 新建集合fruit2添加元素 SINTER fruit1 fruit2 # 交集求出共同元素返回香蕉 SUNION fruit1 fruit2 # 并集合并后去除重复元素返回苹果、香蕉、葡萄 SDIFF fruit1 fruit2 # 差集fruit1有、fruit2没有返回苹果3. 最佳使用场景Set 类型的核心优势是「自动去重 高效集合运算」以下是 4 个最常见的生产场景去重统计利用 Set 不可重复的特性快速实现去重统计比如独立 IP 访问量、单日下单用户数、文章标签去重社交关系场景利用 Set 的集合运算实现共同好友、共同关注、可能认识的人等功能——用 SINTER 取交集共同好友用 SDIFF 取差集可能认识的人抽奖场景利用 SPOP 或 SRANDMEMBER 命令实现随机抽奖功能——SPOP 弹出元素避免重复中奖SRANDMEMBER 随机获取可重复参与黑名单/白名单存储恶意 IP、违规用户黑名单或 VIP 用户白名单用 SISMEMBER 命令快速判断用户/IP 是否在名单中高效拦截。五、ZSetSorted Set 有序集合1. 核心介绍ZSetSorted Set有序集合是 Redis 五种基础数据类型中最强大的一种核心特点是「有序、不可重复、带分数」不可重复和 Set 一样同一个元素只能存一次自动去重带分数score每个元素都关联一个 double 类型的分数Redis 会根据分数自动对元素排序默认升序有序排序基于分数支持升序、降序查询支持范围查询如前 10 名、前 100 名。ZSet 完美解决了“有序 去重 范围查询”的需求是排行榜、延时任务等场景的终极解决方案。2. 常用命令ZSet 命令均以 Z 开头示例极简复制即可实操# 1. 基础操作添加/删除/查询 ZADD rank 90 小红 85 小明 80 小刚 # 添加元素带分数三人成绩排名 ZSCORE rank 小红 # 获取元素的分数返回90 ZREM rank 小刚 # 删除元素删除小刚的排名 ZCARD rank # 获取元素个数返回2 # 2. 分数操作核心排行榜打榜 ZINCRBY rank 5 小明 # 增加元素分数小明成绩加5变成90 # 3. 排序与范围查询核心排行榜展示 ZRANGE rank 0 -1 WITHSCORES # 升序查询显示所有成绩 ZREVRANGE rank 0 1 WITHSCORES # 降序查询排行榜常用显示前2名 # 4. 排名查询 ZREVRANK rank 小红 # 降序排名从0开始返回0第一名3. 最佳使用场景ZSet 类型的核心优势是「有序 分数 范围查询」以下是 3 个最常见的生产场景排行榜系统这是 ZSet 最经典的场景几乎所有排行榜都可以用 ZSet 实现——游戏战力榜score战力值、电商销量榜score销量、朋友圈点赞榜score点赞数、热搜榜score搜索次数用 ZREVRANGE 即可快速获取前 N 名延时任务利用 ZSet 的「分数排序」特性实现延时任务如订单超时取消、消息延时推送——score任务执行时间戳member任务ID消费者定时查询 ZSet 中 score ≤ 当前时间戳的元素执行任务后删除带权重的消息队列在消息队列中给消息设置权重score权重值数值越大优先级越高用 ZREVRANGE 按权重从高到低获取消息实现优先级消费。六. 总结数据类型核心特性最佳场景Stringkey-value、支持数值运算缓存、计数器、分布式锁、临时数据Hashkey-field-value、结构化存储用户/商品对象、购物车、配置项List有序可重复、两端操作高效消息队列、时间线、最新N条数据Set无序不可重复、支持集合运算去重统计、共同好友、抽奖、黑名单ZSet有序不可重复、带分数、范围查询排行榜、延时任务、权重消息队列

更多文章