Redis通用命令+五大核心数据结构

Redis 作为最流行的内存型 NoSQL 数据库,凭借高速读写、功能丰富的优势,成为互联网项目中的"标配"------从缓存、计数器到分布式锁,几乎处处都能看到它的身影。对于新手而言,想要快速上手 Redis,核心就是掌握两大块内容:通用命令(操作所有数据的基础)和五大常见数据结构(应对不同业务场景)。

今天这篇博客,就用"概念+实操命令"的形式,手把手带大家吃透这些核心知识点,全程无复杂底层原理,新手也能轻松跟上,看完就能上手实操。

一、先搞定基础:Redis 通用命令(所有数据结构通用)

通用命令是操作 Redis 的"基本功",无论操作哪种数据结构,这些命令都能直接使用,主要用于键(key)的管理、数据查询、过期设置等,记住这些,能解决 80% 的基础操作需求。

以下是最常用、最实用的通用命令,每一条都附实操示例(假设我们已连接 Redis 客户端,命令后为执行效果说明):

1. 键的基础操作(增删查改)

  • SET key value:设置一个键值对(覆盖已有键) 示例:SET name zhangsan → 新增/修改 key 为 name,value 为 zhangsan

  • GET key:获取指定键的值(若键不存在,返回 nil) 示例:GET name → 返回 "zhangsan"

  • DEL key [key ...]:删除一个或多个键(返回删除成功的键的数量) 示例:DEL name age → 若 name 和 age 都存在,返回 2

  • EXISTS key:判断键是否存在(存在返回 1,不存在返回 0) 示例:EXISTS name → 若已删除 name,返回 0

2. 过期时间相关(高频场景)

  • EXPIRE key seconds:给指定键设置过期时间(单位:秒),过期后键自动删除 示例:SET code 123456 + EXPIRE code 60 → 验证码 123456 有效期 60 秒

  • TTL key:查看键的剩余过期时间(单位:秒;-1 表示永不过期,-2 表示已过期/不存在) 示例:TTL code → 若距离过期还有 30 秒,返回 30

  • PERSIST key:取消键的过期时间,设置为永不过期 示例:PERSIST code → 取消验证码的过期时间,返回 1(成功)

3. 其他实用通用命令

  • KEYS pattern:模糊匹配所有符合规则的键(* 匹配任意字符,? 匹配单个字符) 示例:KEYS n* → 匹配所有以 n 开头的键(如 name、nickname)

  • TYPE key:查看指定键对应的数据结构类型(返回 string、hash、list 等) 示例:TYPE name → 返回 string(因为 name 的值是字符串)

  • FLUSHDB:清空当前数据库的所有键(谨慎使用!) 示例:FLUSHDB → 执行后,当前数据库所有键全部删除

小贴士:Redis 的命令不区分大小写(如 SET 和 set 效果一致),但键(key)通常建议统一大小写(如 Name 和 name 是两个不同的键),避免混淆。

二、核心重点:Redis 五大常见数据结构(附命令+场景)

Redis 支持多种数据结构,其中最常用、最核心的有 5 种:字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)。每种数据结构都有专属命令,对应不同的业务场景,我们逐个拆解,重点记"核心命令+应用场景"。

1. 字符串(String):最基础、最常用的数据结构

字符串是 Redis 最基础的数据结构,value 可以是字符串、数字(整数/浮点数),甚至是二进制数据(如图片),单个字符串最大容量为 512MB。

核心场景:存储验证码、token、用户昵称、商品库存、计数器等。

专属核心命令(补充通用命令之外的):

  • INCR key:将键对应的数字值自增 1(仅适用于 value 为整数的情况) 示例:SET count 10 + INCR count → count 变为 11(适合做计数器)

  • DECR key:将键对应的数字值自减 1 示例:DECR count → count 变回 10

  • APPEND key value:在原有字符串末尾追加内容 示例:SET msg "hello" + APPEND msg " world" → msg 变为 "hello world"

  • STRLEN key:获取字符串的长度 示例:STRLEN msg → 返回 11("hello world" 的长度)

2. 哈希(Hash):适合存储结构化数据

哈希结构类似"字典",key 是一个整体标识(如 user:1001),value 是一个键值对集合(如 name:zhangsan、age:20),适合存储具有多个属性的结构化数据。

核心场景:存储用户信息、商品详情、订单信息等(无需拆分多个 key,便于管理)。

专属核心命令:

  • HSET key field value:给哈希表设置一个字段和值 示例:HSET user:1001 name zhangsan age 20 → 新增用户 1001 的姓名和年龄

  • HGET key field:获取哈希表中指定字段的值 示例:HGET user:1001 name → 返回 "zhangsan"

  • HGETALL key:获取哈希表中所有的字段和值 示例:HGETALL user:1001 → 返回 ["name", "zhangsan", "age", "20"]

  • HDEL key field [field ...]:删除哈希表中的指定字段 示例:HDEL user:1001 age → 删除用户 1001 的年龄字段

  • HKEYS key:获取哈希表中所有的字段名 示例:HKEYS user:1001 → 返回 ["name"]

3. 列表(List):有序、可重复的"队列/栈"

列表是有序的字符串集合,元素可以重复,底层是双向链表结构,支持从头部(left)和尾部(right)插入、删除元素,操作速度极快。

核心场景:消息队列(如订单通知)、最新消息列表(如朋友圈动态)、栈/队列实现。

专属核心命令:

  • LPUSH key value [value ...]:从列表头部插入一个或多个元素 示例:LPUSH msgList "hello" + LPUSH msgList "world" → 列表变为 ["world", "hello"]

  • RPUSH key value [value ...]:从列表尾部插入一个或多个元素 示例:RPUSH msgList "redis" → 列表变为 ["world", "hello", "redis"]

  • LPOP key:从列表头部删除并返回一个元素 示例:LPOP msgList → 返回 "world",列表变为 ["hello", "redis"]

  • RPOP key:从列表尾部删除并返回一个元素 示例:RPOP msgList → 返回 "redis",列表变为 ["hello"]

  • LRANGE key start stop:获取列表中指定范围的元素(start 从 0 开始,stop 为 -1 表示所有元素) 示例:LRANGE msgList 0 -1 → 返回 ["hello"]

4. 集合(Set):无序、不可重复的"集合"

集合是无序的字符串集合,元素不可重复,底层是哈希表结构,支持交集、并集、差集等集合操作,适合去重和关系判断。

核心场景:用户标签去重、好友列表、共同好友查询、抽奖活动(随机取元素)。

专属核心命令:

  • SADD key member [member ...]:向集合中添加一个或多个元素(重复元素会自动去重) 示例:SADD tag:1001 music sports book → 给用户 1001 添加 3 个标签

  • SMEMBERS key:获取集合中所有的元素 示例:SMEMBERS tag:1001 → 返回 ["music", "sports", "book"](顺序不固定)

  • SREM key member [member ...]:从集合中删除一个或多个元素 示例:SREM tag:1001 book → 删除标签 book

  • SISMEMBER key member:判断元素是否在集合中(存在返回 1,不存在返回 0) 示例:SISMEMBER tag:1001 music → 返回 1

  • SINTER key1 key2:求两个集合的交集(共同元素) 示例:SADD tag:1002 music movie + SINTER tag:1001 tag:1002 → 返回 ["music"]

5. 有序集合(Sorted Set):有序、不可重复,带"分数"排序

有序集合是 Set 的增强版,元素不可重复,但每个元素都有一个"分数(score)",Redis 会根据分数自动对元素进行升序排序,底层是跳表结构,兼顾查询和插入效率。

核心场景:排行榜(如商品销量榜、用户积分榜)、带权重的消息排序。

专属核心命令:

  • ZADD key score member [score member ...]:向有序集合中添加元素(score 为排序依据) 示例:ZADD rank:sales 100 apple 80 banana 120 orange → 新增销量排行榜

  • ZRANGE key start stop [WITHSCORES]:按分数升序获取指定范围的元素(WITHSCORES 显示分数) 示例:ZRANGE rank:sales 0 -1 WITHSCORES → 返回 ["banana", "80", "apple", "100", "orange", "120"]

  • ZREVRANGE key start stop [WITHSCORES]:按分数降序获取指定范围的元素(适合做排行榜) 示例:ZREVRANGE rank:sales 0 1 WITHSCORES → 返回 ["orange", "120", "apple", "100"](前两名)

  • ZSCORE key member:获取指定元素的分数 示例:ZSCORE rank:sales apple → 返回 "100"

  • ZINCRBY key increment member:给指定元素的分数增加指定值(适合积分、销量更新) 示例:ZINCRBY rank:sales 10 apple → apple 的分数变为 110

三、实操建议+避坑指南

掌握了通用命令和五大数据结构,就相当于入门了 Redis 的核心用法,这里给新手两个实用建议,帮你少踩坑、快速上手:

  1. 先动手,再理解:建议安装 Redis 客户端(如 Redis Desktop Manager),对照本文的命令示例,逐一执行,直观感受每种命令的效果,比死记硬背更高效;

  2. 选对数据结构很关键:不同场景对应不同的数据结构,比如存储用户信息用 Hash,做排行榜用 Sorted Set,避免滥用 String(比如把用户多个属性拆成多个 String 键,不利于管理);

  3. 谨慎使用高危命令:FLUSHDB(清空当前库)、FLUSHALL(清空所有库)、DEL *(删除所有键),生产环境中一定要禁用,避免误操作导致数据丢失。

四、总结

Redis 的核心竞争力的是"高速读写+灵活的数据结构",而想要用好 Redis,关键就是:吃透通用命令(搞定基础操作)、掌握五大数据结构(匹配业务场景)。

本文讲解的命令和数据结构,是 Redis 最常用、最基础的内容,覆盖了日常开发中 90% 以上的场景。新手可以先熟练掌握这些内容,后续再逐步深入持久化(RDB/AOF)、分布式部署等进阶知识点。

相关推荐
Refly2 小时前
【微信接入 OpenClaw 龙虾🦞】10分钟手把手教程完成接入,Claude 模型无限使用
前端·微信·github
恋猫de小郭2 小时前
为什么中转渠道的顶级模型会不好用?这是一个技术问题
前端·人工智能·ai编程
发现一只大呆瓜2 小时前
React-深度拆解 React路由:从实战进阶到底层原理
前端·react.js·面试
不甜情歌2 小时前
搞懂 Promise:告别回调嵌套,再也不怕异步代码乱成麻
前端·javascript
野草arthas2 小时前
什么是视觉层次?为什么需要它?
前端
发现一只大呆瓜2 小时前
React-手把手带你实现 Keep-Alive 效果
前端·react.js·面试
酉鬼女又兒3 小时前
入门前端CSS 媒体查询全解析:从入门到精通,打造完美响应式布局(可用于备赛蓝桥杯Web应用开发)
前端·css·职场和发展·蓝桥杯·前端框架·html5·媒体
6+h3 小时前
【Redis】底层原理解析(SDS / 跳表 / IO多路复用 / 单线程模型)
数据库·redis·bootstrap
Dxy12393102163 小时前
HTML常用标签详解
前端·html