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

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 valuekey为键名,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 等类型时,需用对应的赋值命令(如HSETLPUSH);

  • 赋值时如果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命令执行后无法撤销,一旦误删重要键(如生产环境的用户数据键),可能导致数据丢失。因此,删除前建议:

  1. GETTYPE确认键的信息,避免删错;

  2. 重要键可先通过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 patternpattern为匹配规则,支持通配符)

  • 通配符规则:

符号含义示例
?匹配1 个任意字符ke? 匹配 key1key2
*匹配任意个字符(包括 0 个)ke* 匹配 keykey123keyabc
[]匹配括号内的任一字符,支持用-表示范围ke[1-3] 匹配 key1key2key3
\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:键名无规范,后续管理混乱

问题:键名用k1data2等无意义名称,后期无法快速定位数据,甚至出现键名冲突(如不同业务用了相同的键名)。
原因:忽视键名命名规范,仅图一时方便。
解决方案

  • 统一采用 “业务类型:唯一标识:属性” 的命名格式(如order:10001:status);

  • 禁止键名包含中文、空格或特殊符号(如@#),避免编码问题或命令解析错误。

3.5 坑 5:忽略命令大小写与键名大小写的区别

问题:执行keys *能查到键,但执行KEYS *查不到;或Key1key1被当作同一个键。
原因:混淆了 Redis 命令与键名的大小写规则。
解决方案

  • 命令大小写:Redis 命令不区分大小写(如keys *KEYS *效果一致),但推荐统一用大写,便于区分命令与键名;

  • 键名大小写:Redis 键名严格区分大小写Key1key1是两个不同的键),命名时需统一大小写规则(如全部小写)。

四、总结:基础操作的学习与实践建议

Redis 基础操作看似简单,但却是后续学习的 “地基”—— 只有熟练掌握SETGETEXISTSDELTYPEKEYS这 6 个命令,才能顺利学习 String、Hash、List 等复杂数据类型的操作。结合本文内容,给新手以下学习建议:

  1. 先记规则,再练实操:先熟记每个命令的格式、返回值和注意事项(如SET的覆盖特性、KEYS的通配符规则),再打开redis-cli客户端反复练习,通过 “创建键→操作键→查看键” 的流程加深理解,比如先用电报SET创建多个不同类型的键,再用TYPE判断类型、用KEYS匹配查询。

  2. 结合场景,主动思考:不要孤立地学习命令,要结合实际场景思考如何组合使用。例如:

    • 安全更新数据:EXISTS(判断键是否存在)→ GET(查看旧值)→ SET(更新新值);

    • 清理过期数据:KEYS 业务前缀:*(匹配待清理键)→ TYPE(确认类型)→ DEL(删除键);

    • 数据完整性检查:EXISTS(批量判断键)→ GET/HGET(抽样取值验证)。

  3. 重视避坑,养成习惯:从入门阶段就养成 “生产环境不用KEYS”“删除前先备份”“键名规范化” 等好习惯,避免后期因操作不当导致业务问题。

基础操作的学习告一段落后,下一篇文章将聚焦 Redis 中最基础的数据类型 ——String(字符串类型),深入讲解其专属命令(如INCR自增、APPEND追加)与实际业务场景(如文章阅读量统计、生成自增 ID),帮你进一步提升 Redis 实操能力。


文章转载自:

http://nUB8giGr.jqzns.cn
http://gBtJYKcg.jqzns.cn
http://TqIVZXv3.jqzns.cn
http://TmCSJbTi.jqzns.cn
http://rsDaqNee.jqzns.cn
http://MvyOf6V2.jqzns.cn
http://HuvPBA7F.jqzns.cn
http://D66bXn5u.jqzns.cn
http://xv5a1dZM.jqzns.cn
http://KbjDrOIe.jqzns.cn
http://Dv2XT8Qj.jqzns.cn
http://b56MRbPi.jqzns.cn
http://Ry4cxWxM.jqzns.cn
http://fKZB3P9l.jqzns.cn
http://erWsED4F.jqzns.cn
http://duUaJNDC.jqzns.cn
http://Dkc3HOwc.jqzns.cn
http://WkYmFgxR.jqzns.cn
http://4POUzDBP.jqzns.cn
http://lsGBgNpg.jqzns.cn
http://0qP8eWYS.jqzns.cn
http://gxJYUcqr.jqzns.cn
http://fV8nozlP.jqzns.cn
http://OfQg17eY.jqzns.cn
http://Oqr98TFq.jqzns.cn
http://hsZS7XFi.jqzns.cn
http://UIH3uK04.jqzns.cn
http://aPPFVLW1.jqzns.cn
http://cfL1MOXX.jqzns.cn
http://L7qLjWNI.jqzns.cn
http://www.dtcms.com/a/383070.html

相关文章:

  • 【linux】特殊权限
  • [数据结构] 排序
  • Python网络与多任务编程:TCP/UDP实战指南
  • Elasticsearch面试精讲 Day 17:查询性能调优实践
  • Go-zero 构建 RPC 与 API 服务全流程
  • CRI容器运行时接口
  • 《Python 自动化表单填写全攻略:从基础操作到实战案例》
  • 黑马程序员JVM基础学习笔记
  • 驰骋低代码BPM开发平台的组成部分
  • ubuntu22.04源码安装ffmpeg-4.4
  • 黑马Java进阶教程,全面剖析Java多线程编程,并发和并行,笔记02
  • 大数据毕业设计选题推荐-基于大数据的教育与职业成功关系可视化分析系统-Spark-Hadoop-Bigdata
  • Ubuntu Server 安装图形界面和通过Window远程桌面连接服务器(Xrdp)
  • 贪心算法在云计算虚拟机部署问题中的应用
  • macOS中找不到钥匙串访问
  • 基于FPGA实现LeNet-5(经典CNN识别手写数字)推理
  • 算法-双指针5.6
  • Eino Indexer 组件完全指南
  • 算法-双指针3.4
  • 【开题答辩全过程】以 “旧书驿站”微信小程序的设计与开发为例,包含答辩的问题和答案
  • Altium Designer使用精通教程 第七章(PCB输出)
  • 【秋招笔试】2025.09.13美团秋招算法岗真题\
  • LeetCode 2367.等差三元组的数目
  • 第16课:多模态Agent协作
  • 《网络攻防技术》第一章: 网络攻防概述
  • 消息语义一致性:Exactly-Once 之外的“效果等价”设计
  • SPI NOR Flash 的命令码详解
  • kafka--基础知识点--5.2--最多一次、至少一次、精确一次
  • Spark(1):不依赖Hadoop搭建Spark环境
  • Python快速入门专业版(三十):函数进阶:函数嵌套与作用域(内部函数访问外部变量)