简介:想快速上手 Redis,只需抓住“是什么、怎么连、常用命令、过期机制、应用场景”五条主线。本文系统梳理 Redis 的核心特性与基础数据类型,详解 SET、GET、DEL、EXPIRE、TTL、INCR、DECR 等高频命令的用法与易错点,并给出典型落地场景与进阶学习路径,助你快速建立完整、可落地的知识框架。
Redis 是一款基于内存的键值数据库,数据主要驻留在内存中,配合 I/O 多路复用的网络模型,读写延迟通常在微秒级。正因如此,它成为高并发系统中最常见的基础组件之一:缓存热点数据、存储登录会话、承载计数器与排行榜,都离不开它。
初学者可以先记住它的四个核心特征:
入门阶段建议准备一个本地实例,常见安装方式有三类:操作系统包管理器直接安装、源码编译安装、容器镜像一键启动,按个人习惯选择即可,默认端口为 6379。
连接方式主要有两种:一是命令行客户端,适合学习命令、快速验证结果;二是各类编程语言提供的客户端库,用于在应用代码中集成。学习阶段建议多用命令行客户端亲手敲命令,加深对命令语义的理解,这比看文档记忆效率高得多。
Redis 有五种最常用的基础数据类型:
入门阶段以 String 为主线练熟命令,再逐步扩展到其他结构。
SET key value:写入(或覆盖)一个字符串键值对;GET key:读取键对应的值,键不存在时返回空;DEL key:删除一个或多个键,返回成功删除的数量。
SET user:1001 "zhangsan"GET user:1001 # => "zhangsan"DEL user:1001 # => (integer) 1
实践建议:为键设计统一命名规范,例如“业务名:对象:标识”,用冒号分层,便于按前缀检索和后续运维。此外,SET 支持丰富的选项,例如写入时直接指定过期秒数,或通过 NX 选项实现“仅当键不存在时才写入”,后者常用于分布式场景下的简单互斥语义。
EXPIRE key seconds:为已存在的键设置生存时间(秒),到期后键被自动删除;若键不存在,命令返回 0;TTL key:查看键的剩余生存时间(秒)。返回正数表示剩余秒数;返回 -1 表示键存在但未设置过期;返回 -2 表示键已不存在。
SET session:token "abc123"EXPIRE session:token 3600 # 1 小时后失效TTL session:token # => (integer) 3599
两个易错点需要特别注意:一是对已设置过期时间的键重新执行 SET,会清除原有的过期时间,键变为永久有效;二是若想让某个键永不过期,可以使用 PERSIST 命令显式移除其生存时间。
INCR key:将键中存储的数字值加 1,键不存在时先初始化为 0 再自增;DECR key:将键中存储的数字值减 1。
INCR article:1001:views # => (integer) 1INCR article:1001:views # => (integer) 2DECR stock:9001 # 库存扣减
这类命令最大的价值在于原子性:读取、修改、写回在一个命令内完成,即使大量客户端并发操作同一个键,也不会出现互相覆盖导致的计数丢失,应用侧无需额外加锁。需要指定步长时可使用 INCRBY、DECRBY。注意:若键中存储的值不能解析为整数,计数命令会直接报错,因此写入计数键时应保证值为合法数字。
Redis 并不会为每个过期键设置精确的定时器,而是组合两种策略协同工作:
这种设计在“及时释放内存”与“不过多消耗 CPU”之间取得了平衡。理解这一点很重要:TTL 归零的键未必在那一瞬间被物理删除,但逻辑上已经不可访问。当内存达到上限时,Redis 还会按照配置的淘汰策略(例如优先移除最近最少使用的键等)腾出空间,生产环境中应根据业务语义谨慎选择策略,避免误删关键数据。
GET 缓存,未命中则回源查询并 SET 写入,同时设置几分钟到几小时的过期时间,兼顾性能与数据新鲜度;INCR 原子累加,天然应对高并发写入;DECR 扣减库存,配合“仅当键不存在时写入”的命令选项构造限流窗口,超出阈值即拒绝请求;入门之后,建议按以下顺序继续深入:
Redis 快速入门的知识主线可以概括为:一个模型(内存键值 + 原子命令)、五类基础结构、一组高频命令(SET、GET、DEL、EXPIRE、TTL、INCR、DECR)、一套过期与淘汰机制,以及若干典型应用场景。真正把命令语义、原子性的来源和过期删除机制这三件事理解透彻,后续学习持久化与集群架构时就会顺畅得多。建议边学边练:搭一个本地实例,亲手敲一遍每个命令,再用一个小型缓存或计数需求把知识点串起来,学习效果远胜于单纯阅读文档。