第 3 篇 - Redis 初体验:第一个命令开始

张开发
2026/4/20 10:30:16 15 分钟阅读

分享文章

第 3 篇 - Redis 初体验:第一个命令开始
目录第 3 篇 - Redis 初体验第一个命令开始 阅读前必读我当年学命令时踩的坑先连接上 Redis方式 1命令行连接最常用方式 2远程连接方式 3图形化工具10 个必学的基础命令SET - 存储数据GET - 读取数据DEL - 删除数据EXPIRE - 设置过期时间KEYS - 查看所有键INCR - 自增 1DECR - 自减 1LPUSH - 列表左边插入RPUSH - 列表右边插入LRANGE - 查看列表用 Redis 完成 3 个小任务任务 1记录个人信息任务 2列一个购物清单任务 3统计文章阅读量三个常见的坑坑 1键名没有规范坑 2忘记设置过期时间坑 3在生产环境用 KEYS 命令常见问题FAQ练习题自我验证 选择题每题 20 分实操题✅ 答案解析今日打卡任务下篇预告第 3 篇 - Redis 初体验第一个命令开始学习难度⭐⭐☆☆☆入门级 · 动手实操预计耗时40 分钟边看边敲重要提示从这篇开始正式实操请确保你已经安装好 Redis第 2 篇内容。如果还没安装先回去看第 2 篇。 阅读前必读重要提示这篇要动手—— 和第 4 篇预习课不同这篇你需要打开终端跟着我一个个敲命令不要怕敲错—— 敲错了没关系Redis 不会爆炸大不了删了重来命令不用背—— 我写这篇文章就是给你当小抄的随时回来查就行每步都解释—— 每个命令我都会解释为什么不只是怎么做学习建议准备两个窗口一个看这篇文章一个开终端敲命令不要复制粘贴手动敲肌肉记忆比大脑记忆更可靠遇到报错不要慌99% 的情况是拼写错误准备好了吗我们开始。我当年学命令时踩的坑2016 年我安装好 Redis 后兴冲冲地打开命令行。然后呢一脸懵逼。我知道可以用redis-cli连接但连接完之后该干嘛我看了一些教程上来就讲Redis 有 5 种数据类型然后巴拉巴拉列一堆命令。我跟着敲了几遍当时觉得会了过两天全忘了。最尴尬的是有一次我想清空测试数据用了KEYS *命令。当时没出事后来这个习惯带到了生产环境差点搞挂服务器。后来我教学生时才发现80% 的人都会经历我当年的阶段知道怎么连接但不知道接下来干嘛敲了几遍命令但不知道实际能做什么学了一堆命令但用的时候想不起来所以这篇我不讲数据类型、“底层原理”就带你用 Redis 完成 3 个小任务。做完这些你就已经入门了。先连接上 Redis如果你已经安装好 Redis第 2 篇的内容连接很简单。还是在开始菜单中搜索并打开Ubuntu。方式 1命令行连接最常用在终端输入redis-cli连接成功后你会看到这个提示符127.0.0.1:6379这个提示符的意思是127.0.0.1本地地址你的电脑6379Redis 默认端口等待你输入命令提示如果你看到别的东西说明连接有问题。检查 Redis 服务有没有启动。实操截图如果连接失败检查 Redis 服务有没有启动# Macbrew services list# Linuxsudosystemctl status redis方式 2远程连接如果 Redis 安装在服务器上其他电脑用这个命令redis-cli-h192.168.1.100-p6379-h服务器 IP 地址-p端口号默认 6379由于当前 Redis 安装在本地电脑可以使用本地IP连接127.0.0.1。实操截图通过上述操作我们需要知晓redis-cli默认连接的就是127.0.0.1:6379所以平时不用写参数。只有当 Redis 在其他电脑上或者端口改了才需要加-h或-p指定。如果服务器设置了密码redis-cli-h192.168.1.100-p6379-amypassword⚠️注意生产环境不要直接在命令行里写密码会暴露在历史记录里连接后用AUTH命令更安全。方式 3图形化工具如果你不习惯命令行可以用图形化工具。但是一般建议后期使用图形化前期加强命令的熟悉程度Another Redis Desktop Manager免费、开源、好用下载地址https://github.com/qishibo/AnotherRedisDesktopManager界面如下图可视化操作点几下鼠标就能存取数据适合新手。还有其他工具可选Redis Desktop Manager、Medis 等我用 Another 比较多界面清爽。10 个必学的基础命令提示下面是整篇文章的核心每个命令都要跟着敲不要只看动手敲了才是你的。Redis 命令有几百个但常用的就十几个。我先教你 10 个最基础的够你完成 80% 的入门练习。学习建议每学一个命令在终端敲 3 遍形成肌肉记忆。SET - 存储数据提示这是你最常用的命令多敲几遍。# 存储一个用户的姓名127.0.0.1:6379SET name张三OK记忆技巧SET 设置注意几个细节键名name不用引号值张三如果是字符串建议加引号执行成功后会返回OK常见问题Q: 如果键已经存在SET 会怎样答会覆盖原来的值。127.0.0.1:6379SET name张三OK127.0.0.1:6379SET name李四OK127.0.0.1:6379GET name李四← 被覆盖了所以 SET 不是添加而是设置。这个要记住。实操截图这个时候我们并没有看到李四而是\xe6\x9d\x8e\xe5\x9b\x9b乱码了。其实它是 UTF-8 编码的 “李四” 的十六进制表示这不是数据损坏而是redis-cli默认以 “纯字节模式” 输出没有对 UTF-8 中文进行解码显示。我们可以直接在连接命令后加上--raw强制客户端以原始文本模式输出自动解码中文。当然还有其他解决方式大家自行搜索。先输入QUIT退出客户端再次连接。就可以正常拿到结果了。GET - 读取数据提示GET 和 SET 是一对一个存一个取。127.0.0.1:6379GET name张三记忆技巧GET 获取英文直译常见问题Q: 如果键不存在会返回什么答返回nil空值。127.0.0.1:6379GET not_exists(nil)实操截图我们在实操时发现在获取不存在的键时无法显示nil为什么呢这个现象是--raw参数的设计特性不是 Redis 出问题了。--raw模式会让redis-cli直接输出服务器原始响应不做任何格式化处理。不存在的键在 Redis 底层返回的是空值普通模式会把它翻译成(nil)而--raw模式下就只会输出一个空行看不到提示。当我们退出客户端不添加--raw参数连接再次执行GET not_exists命令可以返回(nil)。Q: 为什么有时候看到(nil)有时候什么都没有答这和你使用的模式有关。如果你用了--raw参数nil会显示为空行。这是正常现象不是 Redis 出问题了。经验之谈新手建议不用--raw参数这样能看到(nil)提示方便调试。DEL - 删除数据提示DEL 用来删除数据删了就没了谨慎使用。127.0.0.1:6379DEL name(integer)1返回值1表示删除了 1 个键。再试试删除不存在的键127.0.0.1:6379DEL not_exists(integer)0← 返回0表示没删掉任何东西实操截图常见问题Q: 返回值是什么意思答返回的数字表示成功删除了几个键。1 删除了 1 个0 没删掉键不存在2 一次删除了 2 个可以同时删多个EXPIRE - 设置过期时间提示这个命令很实用比如短信验证码、临时令牌都可以设置自动过期。# 先存储一个验证码127.0.0.1:6379SET sms_code123456OK# 设置 60 秒后过期127.0.0.1:6379EXPIRE sms_code60(integer)1# 查看还剩多少秒127.0.0.1:6379TTL sms_code(integer)45# 等 60 秒后再试127.0.0.1:6379GET sms_code(nil)← 已经自动删除了记忆技巧EXPIRE 过期实操截图常见问题Q: 返回值1是什么意思答表示设置成功。如果返回0说明键不存在设置失败。Q: TTL 返回-1是什么意思答表示这个键没有设置过期时间会永久存在。Q: TTL 返回-2呢答表示键已经过期了或者根本不存在。KEYS - 查看所有键提示这个命令开发环境随便用生产环境别用# 查看所有键127.0.0.1:6379KEYS *1)name2)age3)city# 模糊匹配只看 user 开头的键127.0.0.1:6379KEYS user:*1)user:1:name2)user:2:name记忆技巧KEYS 钥匙查看所有锁⚠️警告KEYS 命令会一次性扫描所有键数据量大时会阻塞 Redis影响性能。生产环境不要用用SCAN命令代替后面会讲。开发环境随便用反正数据量不大。实操截图先准备数据再进行测试INCR - 自增 1提示这个命令做计数器特别方便比如文章阅读量、视频播放量。# 先初始化为 0127.0.0.1:6379SET article_views0OK# 每有一个用户阅读1127.0.0.1:6379INCR article_views(integer)1127.0.0.1:6379INCR article_views(integer)2127.0.0.1:6379INCR article_views(integer)3# 查看总阅读量127.0.0.1:6379GET article_views3记忆技巧INCR Increment自增实操截图常见问题Q: 如果键不存在INCR 会怎样答Redis 会先把键设为 0然后再自增。所以第一次 INCR 会返回 1。127.0.0.1:6379INCR new_counter(integer)1← 自动从0开始Q: 可以一次增加多个吗答可以用INCRBY命令127.0.0.1:6379INCRBY article_views10(integer)13← 一次加10DECR - 自减 1提示和 INCR 相反DECR 是减 1比如库存扣减。# 初始库存 100 件127.0.0.1:6379SET stock100OK# 卖出一件127.0.0.1:6379DECR stock(integer)99# 又卖出一件127.0.0.1:6379DECR stock(integer)98记忆技巧DECR Decrement自减实操截图LPUSH - 列表左边插入提示LPUSH 用来往列表里添加元素L 代表 Left左边。# 往购物清单里添加商品127.0.0.1:6379LPUSH shopping_list牛奶香蕉(integer)2返回值2表示列表现在有 2 个元素。实操截图常见问题Q: 可以一次添加多个元素吗答可以像上面那样空格分隔一次加多个。RPUSH - 列表右边插入提示和 LPUSH 类似R 代表 Right右边。127.0.0.1:6379RPUSH shopping_list橙子葡萄(integer)4现在列表有 4 个元素了。实操截图LRANGE - 查看列表提示LRANGE 用来查看列表中的元素RANGE 范围。# 查看整个列表0 到 -1 表示全部127.0.0.1:6379LRANGE shopping_list0-11)香蕉2)牛奶3)橙子4)葡萄为什么顺序是这样因为 LPUSH 是从左边插入新元素会排在前面先 LPUSH “牛奶”、“香蕉” → 列表[“香蕉”, “牛奶”]再 RPUSH “橙子”、“葡萄” → 列表[“香蕉”, “牛奶”, “橙子”, “葡萄”]记忆技巧RANGE 范围实操截图常见问题Q:0 -1是什么意思答0 从第 1 个元素开始索引从 0 开始-1 到最后 1 个元素所以0 -1就是查看全部。Q: 如果我只想查看前 3 个呢答LRANGE shopping_list 0 2索引 0、1、2共 3 个用 Redis 完成 3 个小任务提示光看不练没用现在你来动手试试。如果担心中文乱码可以将存储的数据转变为拼音或者英文输入。任务 1记录个人信息# 存储姓名127.0.0.1:6379SET user:1:name张三OK# 存储年龄127.0.0.1:6379SET user:1:age25OK# 存储城市127.0.0.1:6379SET user:1:city北京OK# 一次性查看所有信息127.0.0.1:6379MGET user:1:name user:1:age user:1:city1)张三2)253)北京为什么键名用user:1:name这种格式用冒号分隔类似文件夹结构user用户相关1用户 IDname姓名这样管理起来清晰不会混乱。任务 2列一个购物清单# 添加商品127.0.0.1:6379LPUSH shopping_list牛奶面包鸡蛋(integer)3# 查看清单127.0.0.1:6379LRANGE shopping_list0-11)鸡蛋2)面包3)牛奶# 买了一个从右边取出127.0.0.1:6379RPOP shopping_list牛奶# 再看清单127.0.0.1:6379LRANGE shopping_list0-11)鸡蛋2)面包RPOP 是什么RPOP Right POP从列表右边弹出一个元素取出并删除。类似队列的出队操作。任务 3统计文章阅读量# 初始化为 0127.0.0.1:6379SET article:1001:views0OK# 每有一个用户阅读1127.0.0.1:6379INCR article:1001:views(integer)1127.0.0.1:6379INCR article:1001:views(integer)2127.0.0.1:6379INCR article:1001:views(integer)3# 查看总阅读量127.0.0.1:6379GET article:1001:views3实际应用场景假设你有个博客网站每篇文章都有一个阅读量计数器。用户每次访问文章时后端代码执行一次INCR article:文章 ID:views。就这么简单。三个常见的坑提示这些都是我当年踩过的坑你提前知道能省不少事。坑 1键名没有规范错误示范127.0.0.1:6379SET name张三OK127.0.0.1:6379SET name李四# 覆盖了如果你用name这种简单的键名很容易覆盖别人的数据。正确做法127.0.0.1:6379SET user:1:name张三OK127.0.0.1:6379SET user:2:name李四OK用冒号分隔类似文件夹结构模块ID:字段。坑 2忘记设置过期时间错误示范127.0.0.1:6379SET sms_code123456短信验证码这种临时数据如果不设置过期时间会永久占用内存。正确做法127.0.0.1:6379SET sms_code123456EX300EX 300表示 300 秒5 分钟后自动删除。坑 3在生产环境用 KEYS 命令错误示范127.0.0.1:6379KEYS *我在前面说过KEYS 会一次性扫描所有键数据量大时会阻塞 Redis。Redis 是单线程的KEYS 执行期间其他命令都得等着。生产环境这就出问题了——用户请求全堵在那儿。正确做法127.0.0.1:6379SCAN0MATCH user:* COUNT100SCAN 命令分批扫描每次只拿 100 个不影响性能。SCAN 命令后面会详细讲这里先知道 KEYS 不能用就行。常见问题FAQQ1: 命令太多记不住怎么办答正常不要强求一次记住。我教学生这么多年没人能一次记住所有命令。包括我自己有时候也要查文档。我的建议常用的命令SET/GET/INCR多敲几遍形成肌肉记忆不常用的命令EXPIRE/LPUSH知道有这个东西就行用的时候回来查把这篇文章收藏起来当小抄用经验之谈看 10 遍不如写 1 遍。你现在跟着敲一遍比看 10 遍都有用。Q2: 敲命令时出错了怎么办答99% 的情况是拼写错误检查这几项命令拼对了吗比如SET写成SSET空格加了吗Redis 命令对空格很敏感引号成对吗字符串要加引号Redis 服务启动了吗没启动会连接失败常见错误# 错误少了空格SETname张三# 正确SET name张三Q3: 学完这篇能做什么答学完这篇你可以存储和读取数据SET/GET删除数据DEL设置自动过期EXPIRE—— 适合验证码、临时令牌做计数器INCR/DECR—— 适合阅读量、库存管理列表LPUSH/RPUSH/LRANGE—— 适合购物清单、待办事项还不够从第 4 篇开始我会深入讲解 5 种数据类型教你更高级的用法。练习题自我验证 选择题每题 20 分1. 连接本地 Redis 服务用什么命令A.redis connectB.redis-cliC.redis startD.redis open2. 设置一个键值对用什么命令A.PUTB.STOREC.SETD.WRITE3. 让一个键在 60 秒后自动过期用什么命令A.TIMEOUTB.DELAYC.EXPIRED.WAIT4. 查看某个键还剩多少秒过期用什么命令A.TTLB.TIMEC.LEFTD.CHECK5.生产环境中应该避免使用哪个命令A.GETB.SETC.KEYSD.DEL实操题任务用 Redis 实现一个简单的待办事项系统要求添加 3 个待办事项查看所有事项完成一个事项从列表中移除再添加 1 个新事项查看剩余事项提示使用 List 数据类型✅ 答案解析1. 连接本地 Redis 服务用什么命令答案B.redis-cli解析Aredis connect没有这个命令Redis 不用 connect 子命令Bredis-cli正确这是 Redis 的命令行客户端工具Credis start没有这个命令启动服务用redis-serverDredis open没有这个命令实际体验# 在终端输入redis-cli# 看到提示符就连接成功了127.0.0.1:6379经验之谈我第一次学的时候还以为要输入什么复杂的命令结果就一个redis-cli。有时候最简单的答案就是正确答案。2. 设置一个键值对用什么命令答案C.SET解析APUTHTTP 方法不是 Redis 命令BSTORE没有这个命令CSET正确Redis 用 SET 设置键值对DWRITE没有这个命令记忆技巧SET 设置英文直译。实际体验127.0.0.1:6379SET name张三OK3. 让一个键在 60 秒后自动过期用什么命令答案C.EXPIRE解析ATIMEOUT没有这个命令BDELAY没有这个命令CEXPIRE正确EXPIRE 过期DWAIT没有这个命令记忆技巧EXPIRE 过期英文单词。实际体验127.0.0.1:6379SET code123456OK127.0.0.1:6379EXPIRE code60(integer)14. 查看某个键还剩多少秒过期用什么命令答案A.TTL解析ATTL正确TTL Time To Live剩余生存时间BTIME返回当前时间戳不是看过期时间CLEFT没有这个命令DCHECK没有这个命令记忆技巧TTL Time To Live剩余生存时间。实际体验127.0.0.1:6379TTL code(integer)45# 还剩 45 秒5. 生产环境中应该避免使用哪个命令答案C.KEYS解析AGET基础命令安全BSET基础命令安全CKEYS会一次性扫描所有键数据量大时阻塞 Redis影响性能DDEL基础命令安全为什么 KEYS 不能用KEYS 命令会一次性遍历 Redis 中所有的键。如果 Redis 里有几百万个键这个命令会卡好几秒甚至更久。Redis 是单线程的KEYS 执行期间其他命令都得等着。生产环境这就出问题了——用户请求全堵在那儿。正确做法用 SCAN 命令代替分批扫描不影响性能。# 错误示范生产环境别用KEYS user:*# 正确示范用 SCANSCAN0MATCH user:* COUNT100SCAN 命令后面会详细讲这里先知道 KEYS 不能用就行。实操题答案# 1. 添加 3 个待办事项用 LPUSH 从左边插入LPUSH todo_list写 Redis 教程买菜健身# 2. 查看所有事项LRANGE 0 -1 表示查看全部LRANGE todo_list0-1# 3. 完成一个事项移除买菜# LREM 语法LREM 键名 移除数量 值LREM todo_list0买菜# 4. 添加新事项LPUSH todo_list看 Redis 教程第 3 篇# 5. 查看剩余事项LRANGE todo_list0-1经验之谈LPUSH 是从左边插入新元素会排在前面LRANGE 的-1表示最后一个元素LREM 的0表示移除所有匹配的元素如果想移除 1 个改成1常见错误忘记用 LPUSH直接 LRANGE列表是空的LREM 语法记错记住键名、数量、值今日打卡任务完成以下任务并在评论区打卡用 SET/GET 存储你的个人信息用 List 列一个购物清单用 INCR 统计一个计数器完成练习题在评论区分享你用 Redis 做了什么小项目打卡格式✅ 第 3 篇打卡完成 项目用 Redis 做了 xxx 遇到问题xxx 收获xxx提示遇到问题很正常把报错信息贴出来我帮你看看。下篇预告第 4 篇《Redis 数据类型总览5 种核心类型》这篇我们快速过了 10 个基础命令但你可能会问Redis 到底有几种数据类型每种类型能做什么什么时候用 String什么时候用 List第 4 篇是预习课只看不练带你系统了解 5 种数据类型的特点和选型方法。从第 5 篇开始我会一篇讲一个类型手把手带你实操每个命令。作者蜗牛老师10 年开发老兵5 年编程讲师擅长把复杂的技术讲简单我的经历2016 年开始学 Redis踩过很多坑2019 年负责电商项目用 Redis 解决高并发问题2021 年开始教编程帮助 500 学员入门现在专注编程入门教育用生活化类比 实战项目教学专栏《Redis 打卡实战课从 0 到 1 系统掌握》学习建议今天学的 10 个命令至少敲 3 遍肌肉记忆比大脑记忆更可靠。常见问题评论区见我每条都回。

更多文章