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 的核心用法,这里给新手两个实用建议,帮你少踩坑、快速上手:
-
先动手,再理解:建议安装 Redis 客户端(如 Redis Desktop Manager),对照本文的命令示例,逐一执行,直观感受每种命令的效果,比死记硬背更高效;
-
选对数据结构很关键:不同场景对应不同的数据结构,比如存储用户信息用 Hash,做排行榜用 Sorted Set,避免滥用 String(比如把用户多个属性拆成多个 String 键,不利于管理);
-
谨慎使用高危命令:
FLUSHDB(清空当前库)、FLUSHALL(清空所有库)、DEL *(删除所有键),生产环境中一定要禁用,避免误操作导致数据丢失。
四、总结
Redis 的核心竞争力的是"高速读写+灵活的数据结构",而想要用好 Redis,关键就是:吃透通用命令(搞定基础操作)、掌握五大数据结构(匹配业务场景)。
本文讲解的命令和数据结构,是 Redis 最常用、最基础的内容,覆盖了日常开发中 90% 以上的场景。新手可以先熟练掌握这些内容,后续再逐步深入持久化(RDB/AOF)、分布式部署等进阶知识点。