07-Redis 基础操作全攻略:从键管理到数据类型判断
目录
- 引言
- 一、Redis 键值存储的本质:理解 “键” 的核心角色
- 1.1 键值结构的直观展示
- 1.2 键的命名规范(新手必看)
- 二、Redis 基础操作实战:6 大核心命令详解
- 2.1 设置键的值(字符串类型专属):SET 命令
- (1)命令格式与返回值
- (2)实操案例
- (3)新手注意事项
- 2.2 获取键的值(字符串类型专属):GET 命令
- (1)命令格式与返回值
- (2)实操案例
- (3)常见问题与解决
- 2.3 判断键是否存在:EXISTS 命令
- (1)命令格式与返回值
- (2)实操案例
- (3)使用场景
- 2.4 删除键:DEL 命令
- (1)命令格式与返回值
- (2)实操案例
- (3)风险提示
- 2.5 获取键值的数据类型:TYPE 命令
- (1)命令格式与返回值
- (2)实操案例
- (3)使用场景
- 2.6 获取符合规则的键名列表:KEYS 命令
- (1)命令格式与通配符规则
- (2)实操案例
- (3)重要警告
- 三、基础操作避坑指南:新手常犯的 5 个错误
- 3.1 坑 1:在生产环境用`KEYS *`遍历所有键
- 3.2 坑 2:误删键后无法恢复
- 3.3 坑 3:用`GET`命令获取非 String 类型键
- 3.4 坑 4:键名无规范,后续管理混乱
- 3.5 坑 5:忽略命令大小写与键名大小写的区别
- 四、总结:基础操作的学习与实践建议
引言
作为一款高性能的键值(Key-Value)存储数据库,Redis 的所有数据交互都围绕 “键” 展开 —— 无论是存储用户信息、统计文章阅读量,还是管理评论列表,最终都需要通过 “键” 来定位和操作数据。对于刚入门的学习者来说,掌握 Redis 基础操作就像掌握一门语言的 “字母和语法”,是后续学习复杂数据类型(如 Hash、List、Set)的核心前提。然而,很多新手会陷入 “不知道如何查看所有键”“误删键导致数据丢失”“混淆不同数据类型操作命令” 等困境。本文将系统梳理 Redis 基础操作命令,结合实操案例与避坑指南,帮你彻底掌握键管理的核心方法,为 Redis 进阶学习打下坚实基础。
一、Redis 键值存储的本质:理解 “键” 的核心角色
在开始操作前,首先要明确 Redis 的存储逻辑 —— 它以 “键 - 值” 成对的形式存储数据,其中 “键” 是唯一的字符串标识,“值” 则支持多种数据类型(如 String、Hash、List 等)。这种结构就像我们日常生活中的 “钥匙 - 抽屉”:每把钥匙(键)对应一个抽屉(值),抽屉里可以放不同类型的物品(不同数据类型的数据)。
1.1 键值结构的直观展示
Redis 的键值存储结构可通过下表清晰呈现,能直观看到键、值与数据类型的对应关系:
键(key) | 值(value) | 数据类型 |
---|---|---|
k1 | “小明,小强” | String |
k2 | {name:“张三”,age:18} | Hash |
k3 | [1,2,3,3,5] | List |
k4 | [‘a’, ‘b’, ‘c’] | Set |
k5 | [3000 ‘a’, 4000 ‘b’, 5000 ‘c’] | 有序 Set |
从表中可看出,“键” 始终是字符串类型,而 “值” 的类型灵活多样,这也是 Redis 能适配不同业务场景的关键 —— 例如用 String 存储简单文本,用 Hash 存储结构化的用户信息,用 List 存储有序的评论列表。
1.2 键的命名规范(新手必看)
虽然 Redis 对键名没有强制要求,但不规范的命名会导致后续管理混乱(比如分不清k1
对应用户数据还是商品数据)。结合行业实践,推荐采用 “业务类型:唯一标识:属性” 的格式命名,例如:
-
user:100:name
(用户 ID 为 100 的姓名) -
article:1001:view
(文章 ID 为 1001 的阅读量) -
comment:1001:list
(文章 ID 为 1001 的评论列表)
这种命名方式能清晰体现键的业务含义,后续通过键名就能快速定位数据,避免 “猜键名” 的麻烦。
二、Redis 基础操作实战:6 大核心命令详解
重点介绍 6 个基础操作命令,涵盖 “查键、判键、设值、取值、删键、判类型”,是日常使用 Redis 的高频操作。下面将逐一拆解每个命令的格式、返回值、实操案例,并标注需要注意的细节。
2.1 设置键的值(字符串类型专属):SET 命令
SET
命令是 Redis 中最基础的 “写数据” 命令,专门用于给字符串类型的键赋值。需要注意的是,它会覆盖已有键的值,且无视原键的数据类型(比如原键是 Hash 类型,用SET
赋值后会变成 String 类型),是后续所有键操作的基础 —— 只有先创建键,才能进行查询、删除等操作。
(1)命令格式与返回值
-
命令格式:
SET key value
(key
为键名,value
为字符串类型的值) -
返回值:设置成功返回
OK
,无论键是否已存在(已存在则覆盖)。
(2)实操案例
# 1. 给不存在的键赋值(name不存在,新建并赋值)
127.0.0.1:6379> SET name "zhangsan"
OK# 2. 覆盖已存在的键(name已存在,更新值为"lisi")
127.0.0.1:6379> SET name "lisi"
OK# 3. 存储数值类型的字符串(后续可用于自增统计)
127.0.0.1:6379> SET article:1001:view 1580
OK# 4. 存储含空格的字符串(需用双引号包裹)
127.0.0.1:6379> SET greeting "hello redis"
OK
(3)新手注意事项
-
SET
命令仅适用于字符串类型的键,后续学习 Hash、List 等类型时,需用对应的赋值命令(如HSET
、LPUSH
); -
赋值时如果
value
包含空格、特殊符号(如!
、@
),必须用双引号包裹,否则 Redis 会把空格后的内容当作多余参数,导致命令执行错误。
2.2 获取键的值(字符串类型专属):GET 命令
与SET
命令对应,GET
命令用于获取字符串类型键的值,是最基础的 “读数据” 命令。如果键不存在或数据类型不是 String,它会返回特殊结果,需要注意区分。
(1)命令格式与返回值
-
命令格式:
GET key
-
返回值:
-
键存在且为 String 类型:返回对应的字符串值(用双引号包裹);
-
键不存在:返回
(nil)
(表示空值); -
键存在但非 String 类型(如 Hash、List):返回错误信息。
-
(2)实操案例
# 1. 获取存在的String类型键(name存在,返回对应值)
127.0.0.1:6379> GET name
"lisi"# 2. 获取数值类型的字符串键(返回字符串格式的数值)
127.0.0.1:6379> GET article:1001:view
"1580"# 3. 获取含空格的字符串键(正常返回完整值)
127.0.0.1:6379> GET greeting
"hello redis"# 4. 获取不存在的键(返回nil)
127.0.0.1:6379> GET noexists
(nil)# 5. 获取非String类型的键(假设user:100是Hash类型,返回错误)
127.0.0.1:6379> GET user:100
(error) WRONGTYPE Operation against a key holding the wrong kind of value
(3)常见问题与解决
问题:执行GET
返回(nil)
,不确定是键不存在还是值本身就是空?
解决:用EXISTS
命令先判断键是否存在 —— 若EXISTS
返回 1,说明键存在但值为空;若返回 0,说明键不存在。
2.3 判断键是否存在:EXISTS 命令
在操作某个键前,往往需要先判断它是否存在(比如避免覆盖不存在的键,或删除已不存在的键),EXISTS
命令就是专门解决这个问题的工具,尤其适合在SET
(避免误覆盖)、DEL
(避免无效操作)前使用。
(1)命令格式与返回值
-
命令格式:
EXISTS key [key ...]
(支持同时判断 1 个或多个键) -
返回值:整数类型,存在返回 1,不存在返回 0;同时判断多个键时,返回存在的键的个数。
(2)实操案例
# 1. 判断单个键是否存在(name存在,返回1)
127.0.0.1:6379> EXISTS name
(integer) 1# 2. 判断不存在的键(noexists不存在,返回0)
127.0.0.1:6379> EXISTS noexists
(integer) 0# 3. 同时判断多个键(name存在,article:1001:view存在,noexists不存在,返回2)
127.0.0.1:6379> EXISTS name article:1001:view noexists
(integer) 2
(3)使用场景
-
执行
SET
命令前,判断键是否存在,避免误覆盖重要数据; -
执行
DEL
命令前,判断键是否存在,减少无效操作; -
批量检查多个业务键的存在性,快速排查数据是否完整(如检查用户信息的姓名、年龄键是否都存在)。
2.4 删除键:DEL 命令
当需要清理无效数据或删除错误存储的键时,DEL
命令是核心工具。它支持同时删除多个键,返回值能直观看到删除的成功数量,操作后需注意数据无法直接恢复。
(1)命令格式与返回值
-
命令格式:
DEL key [key ...]
(支持删除 1 个或多个键) -
返回值:整数类型,代表成功删除的键的个数(键不存在则不计数)。
(2)实操案例
# 1. 删除存在的键(greeting存在,删除成功,返回1)
127.0.0.1:6379> DEL greeting
(integer) 1# 2. 再次删除已删除的键(greeting已不存在,返回0)
127.0.0.1:6379> DEL greeting
(integer) 0# 3. 同时删除多个键(name存在,article:1001:view存在,noexists不存在,返回2)
127.0.0.1:6379> DEL name article:1001:view noexists
(integer) 2
(3)风险提示
DEL
命令执行后无法撤销,一旦误删重要键(如生产环境的用户数据键),可能导致数据丢失。因此,删除前建议:
-
用
GET
或TYPE
确认键的信息,避免删错; -
重要键可先通过
RENAME
命令备份(如RENAME user:100 user:100_backup
),确认无误后再删除备份。
2.5 获取键值的数据类型:TYPE 命令
Redis 支持多种数据类型,不同类型的操作命令完全不同(如 String 用GET
,Hash 用HGET
)。TYPE
命令能快速判断键对应的值属于哪种类型,避免因类型混淆导致命令执行错误,尤其适合接手他人维护的 Redis 实例时使用。
(1)命令格式与返回值
-
命令格式:
TYPE key
-
返回值:字符串类型,代表键值的数据类型,可能的结果包括:
-
string
:字符串类型; -
hash
:哈希类型; -
list
:列表类型; -
set
:集合类型; -
zset
:有序集合类型; -
stream
:流类型; -
none
:键不存在。
-
(2)实操案例
# 1. 判断String类型的键(先创建键,再判断类型)
127.0.0.1:6379> SET test:string "hello"
OK
127.0.0.1:6379> TYPE test:string
string# 2. 判断List类型的键(先创建List键,再判断类型)
127.0.0.1:6379> LPUSH test:list a b c # LPUSH是List的赋值命令
(integer) 3
127.0.0.1:6379> TYPE test:list
list# 3. 判断Hash类型的键(先创建Hash键,再判断类型)
127.0.0.1:6379> HSET test:hash name "redis" # HSET是Hash的赋值命令
(integer) 1
127.0.0.1:6379> TYPE test:hash
hash# 4. 判断不存在的键(返回none)
127.0.0.1:6379> TYPE noexists
none
(3)使用场景
-
执行数据操作前,先判断类型,确保命令与类型匹配(如
HGET
仅用于 Hash 类型); -
梳理 Redis 实例中的键时,用
TYPE
分类统计不同数据类型的键数量,了解数据存储分布。
2.6 获取符合规则的键名列表:KEYS 命令
当 Redis 中已创建多个键后,可通过KEYS
命令查看所有符合特定规则的键。它支持 glob 风格的通配符,能灵活匹配不同格式的键名,是新手排查键的常用工具,但需注意使用场景限制。
(1)命令格式与通配符规则
-
命令格式:
KEYS pattern
(pattern
为匹配规则,支持通配符) -
通配符规则:
符号 | 含义 | 示例 |
---|---|---|
? | 匹配1 个任意字符 | ke? 匹配 key1 、key2 |
* | 匹配任意个字符(包括 0 个) | ke* 匹配 key 、key123 、keyabc |
[] | 匹配括号内的任一字符,支持用- 表示范围 | ke[1-3] 匹配 key1 、key2 、key3 |
\x | 转义特殊字符(如? 、* ),避免被当作通配符解析 | ke\? 匹配 key? (而非key1 ) |
(2)实操案例
先通过SET
命令创建多个键,再用KEYS
匹配查询:
# 1. 查看所有键(用*匹配任意字符)
127.0.0.1:6379> KEYS *
1) "foo"
2) "bar"
3) "big"# 2. 查看指定名称的键(无通配符,精确匹配)
127.0.0.1:6379> KEYS bar
1) "bar"# 3. 查看以b开头的键(用*匹配b后的任意字符)
127.0.0.1:6379> KEYS b*
1) "bar"
2) "big"# 4. 查看以b开头、r结尾,中间1个字符的键(用?匹配中间字符)
127.0.0.1:6379> KEYS b?r
1) "bar"
(3)重要警告
KEYS
命令的底层逻辑是遍历 Redis 中的所有键,如果 Redis 中存储了几十万甚至上百万个键,执行KEYS
会阻塞服务(无法处理其他请求),严重影响业务性能。因此,禁止在生产环境中使用KEYS
命令,推荐用后续会学到的SCAN
命令(非阻塞遍历)替代。
三、基础操作避坑指南:新手常犯的 5 个错误
掌握命令格式后,新手仍可能因忽视细节导致操作失误。结合实际经验,以下是 5 个高频坑点及解决方案,帮你少走弯路。
3.1 坑 1:在生产环境用KEYS *
遍历所有键
问题:生产环境中 Redis 可能存储几十万键,执行KEYS *
会阻塞服务,导致业务请求超时。
原因:KEYS
命令需要遍历所有键,键数量越多,执行时间越长,期间 Redis 无法处理其他请求。
解决方案:
-
开发 / 测试环境:可临时用
KEYS
排查键,但需注意键数量; -
生产环境:改用
SCAN
命令(非阻塞遍历),格式为SCAN 0 MATCH * COUNT 10
,分批次返回键,不阻塞服务。
3.2 坑 2:误删键后无法恢复
问题:执行DEL
命令删除重要键,发现误删后无法找回数据。
原因:Redis 默认不会备份删除的键,且DEL
命令无撤销机制。
解决方案:
-
事前预防:重要键删除前,用
RENAME
命令备份(如RENAME user:100 user:100_backup_202409
),确认无误后再删除备份; -
事后补救:开启 Redis 的 RDB 或 AOF 持久化,误删后可通过备份文件恢复数据,但需注意恢复可能丢失部分最新数据。
3.3 坑 3:用GET
命令获取非 String 类型键
问题:对 Hash、List 等类型的键执行GET
,返回WRONGTYPE
错误。
原因:GET
是 String 类型的专属命令,其他类型需用对应的取值命令(如 Hash 用HGET
,List 用LRANGE
)。
解决方案:
-
执行取值命令前,先用
TYPE key
判断数据类型; -
牢记 “类型对应命令” 的规则:String 用
GET
/SET
,Hash 用HGET
/HSET
,List 用LRANGE
/LPUSH
。
3.4 坑 4:键名无规范,后续管理混乱
问题:键名用k1
、data2
等无意义名称,后期无法快速定位数据,甚至出现键名冲突(如不同业务用了相同的键名)。
原因:忽视键名命名规范,仅图一时方便。
解决方案:
-
统一采用 “业务类型:唯一标识:属性” 的命名格式(如
order:10001:status
); -
禁止键名包含中文、空格或特殊符号(如
@
、#
),避免编码问题或命令解析错误。
3.5 坑 5:忽略命令大小写与键名大小写的区别
问题:执行keys *
能查到键,但执行KEYS *
查不到;或Key1
与key1
被当作同一个键。
原因:混淆了 Redis 命令与键名的大小写规则。
解决方案:
-
命令大小写:Redis 命令不区分大小写(如
keys *
与KEYS *
效果一致),但推荐统一用大写,便于区分命令与键名; -
键名大小写:Redis 键名严格区分大小写(
Key1
与key1
是两个不同的键),命名时需统一大小写规则(如全部小写)。
四、总结:基础操作的学习与实践建议
Redis 基础操作看似简单,但却是后续学习的 “地基”—— 只有熟练掌握SET
、GET
、EXISTS
、DEL
、TYPE
、KEYS
这 6 个命令,才能顺利学习 String、Hash、List 等复杂数据类型的操作。结合本文内容,给新手以下学习建议:
-
先记规则,再练实操:先熟记每个命令的格式、返回值和注意事项(如
SET
的覆盖特性、KEYS
的通配符规则),再打开redis-cli
客户端反复练习,通过 “创建键→操作键→查看键” 的流程加深理解,比如先用电报SET
创建多个不同类型的键,再用TYPE
判断类型、用KEYS
匹配查询。 -
结合场景,主动思考:不要孤立地学习命令,要结合实际场景思考如何组合使用。例如:
-
安全更新数据:
EXISTS
(判断键是否存在)→GET
(查看旧值)→SET
(更新新值); -
清理过期数据:
KEYS 业务前缀:*
(匹配待清理键)→TYPE
(确认类型)→DEL
(删除键); -
数据完整性检查:
EXISTS
(批量判断键)→GET
/HGET
(抽样取值验证)。
-
-
重视避坑,养成习惯:从入门阶段就养成 “生产环境不用
KEYS
”“删除前先备份”“键名规范化” 等好习惯,避免后期因操作不当导致业务问题。
基础操作的学习告一段落后,下一篇文章将聚焦 Redis 中最基础的数据类型 ——String(字符串类型),深入讲解其专属命令(如INCR
自增、APPEND
追加)与实际业务场景(如文章阅读量统计、生成自增 ID),帮你进一步提升 Redis 实操能力。