Redis 入门实战:基础命令 + 五大数据类型 + 键规范全指南

在后端开发中,Redis 凭借 “快”(内存存储)、“活”(多数据类型)、“稳”(可持久化)的特性,成为缓存、会话存储、排行榜等场景的 “刚需工具”。对于刚接触 Redis 的开发者,无需一开始深究底层原理,先掌握 “怎么用” 才是关键 —— 比如如何切换数据库、统计 key 数量、选择合适的数据类型存储数据。本文将从最基础的操作命令讲起,一步步带你吃透 Redis 的核心能力。

一、Redis 数据库基础操作:4 个必学命令

Redis 默认提供 16 个独立数据库(编号 0-15),就像 16 个 “独立文件柜”,可分别存放不同业务数据(比如 0 号存商品缓存,1 号存用户会话)。以下 4 个命令是管理数据库的 “基本功”,但使用时需注意 “安全边界”。

1. Select:切换数据库的 “钥匙”

作用:从当前数据库切换到指定编号的数据库,语法极简单 ——Select 数据库编号。

Redis 启动后默认停在 0 号数据库,想操作其他库,只需用 Select “解锁”。

实操示例


# 连接Redis后,默认在0号库(命令行前缀为127.0.0.1:6379>)

127.0.0.1:6379> ping # 先确认连接正常,返回PONG说明没问题

PONG

# 切换到2号数据库

127.0.0.1:6379> select 2

OK # 切换成功,前缀变成127.0.0.1:6379[2]>,一眼能区分当前库

# 再切回0号库

127.0.0.1:6379[2]> select 0

OK

127.0.0.1:6379> # 前缀恢复,回到默认库

注意:默认仅支持 0-15 号库,若业务需要更多库,可修改 Redis 配置文件redis.conf中的databases 16(比如改成 32),但需重启 Redis 才能生效。

2. Dbsize:统计当前库的 “计数器”

作用:快速查询当前数据库中所有 key 的总数,无需传参数,直接输Dbsize即可。

它的优势是 “快”—— 底层靠 Redis 内置计数器实现,不用遍历所有 key,哪怕有 10 万条数据也能瞬间出结果。

实操示例


# 先在0号库加2个key(后续讲数据类型时会细讲这些命令,先跟着操作)

127.0.0.1:6379> set product:name "iPhone15" # 存一个字符串key

OK

127.0.0.1:6379> hset user:101 name "小明" age 22 # 存一个哈希key

(integer) 2 # 表示成功添加2个field(name和age)

# 查当前库(0号)的key总数

127.0.0.1:6379> dbsize

(integer) 2 # 正好2个key,和实际添加的一致

# 切换到1号库(默认空库),再查一次

127.0.0.1:6379> select 1

OK

127.0.0.1:6379[1]> dbsize

(integer) 0 # 空库返回0,符合预期

3. Flushdb:清空当前库的 “安全擦除”

作用:删除当前数据库中的所有 key,执行后当前库变成 “空柜子”,但不影响其他库 —— 这是它的 “安全点”,适合清理单个业务的测试数据。

实操示例


# 0号库当前有2个key(先确认)

127.0.0.1:6379[1]> select 0

OK

127.0.0.1:6379> dbsize

(integer) 2

# 清空当前库(0号)

127.0.0.1:6379> flushdb

OK

# 再查key数量,确认清空

127.0.0.1:6379> dbsize

(integer) 0 # 成功清空

4. Flushall:清空所有库的 “高危操作”

作用:删除 Redis 中所有 16 个库的全部 key,相当于 “把所有文件柜里的东西全扔了”—— 生产环境绝对要谨慎,一旦误执行,没有备份的话数据就彻底没了。

实操示例


# 先给3号库加个key,模拟其他库有数据

127.0.0.1:6379> select 3

OK

127.0.0.1:6379[3]> set test:key "hello"

OK

127.0.0.1:6379[3]> dbsize

(integer) 1

# 执行Flushall,清空所有库

127.0.0.1:6379[3]> flushall

OK

# 检查3号库(原1个key)和0号库(原空库)

127.0.0.1:6379[3]> dbsize

(integer) 0

127.0.0.1:6379[3]> select 0

OK

127.0.0.1:6379> dbsize

(integer) 0 # 所有库都空了

生产环境防护:为避免误操作,建议做两件事:① 在redis.conf加rename-command FLUSHALL "",直接禁用该命令;② 用 Redis ACL(权限控制),只给管理员开放该命令权限。

二、Redis 核心:五大数据类型怎么用?

Redis 的核心优势不是 “存键值对”,而是支持 5 种不同数据类型 —— 每种类型对应不同业务场景,比如存对象用 Hash,做排行榜用 Zset。下面逐个拆解它们的 “特性 + 命令 + 场景”,用实例帮你理解。

1. String(字符串):最百搭的 “基础款”

特性:一个 key 对应一个 value,能存文本(如 JSON)、数字(如计数器)、甚至二进制(如图片 Base64),最大能存 512MB—— 就像 “万能收纳盒”,啥都能装。

常用命令表

命令

作用

示例操作

结果 / 说明

set key val

存键值对

set user:name "张三"

OK

get key

取 value

get user:name

"张三"

incr key

数字自增 1(仅支持数字)

set views 50 → incr views

(integer) 51

decr key

数字自减 1

decr views

(integer) 50

append key str

拼接字符串

append user:name "_男"

(integer) 5(拼接后长度)

典型场景

  • 缓存简单数据:比如存商品价格 ——set product:100:price 5999;
  • 做计数器:统计文章阅读量,每读一次执行incr article:200:views;
  • 存验证码:设置 5 分钟过期 ——set code:138xxxx8888 6688 EX 300(EX 表示过期时间,单位秒)。

2. Hash(哈希):存对象的 “专业款”

特性:一个 key 对应多个 “field-value” 对,类似 Java 的 Map—— 比如用user:100当 key,存 name、age、phone 等属性,修改时不用动整个对象,只改某个 field 就行,效率高。

常用命令表

命令

作用

示例操作

结果 / 说明

hset key f val

存 field-value

hset user:100 name "李四" age 28

(integer) 2(加 2 个 field)

hget key field

取单个 field 的值

hget user:100 name

"李四"

hgetall key

取所有 field-value

hgetall user:100

1) "name" 2) "李四" 3) "age" 4) "28"

hdel key field

删除单个 field

hdel user:100 age

(integer) 1(删除成功)

典型场景

  • 存用户详情:user:100为 key,field 包括 name、age、email、address;
  • 存商品属性:product:200为 key,field 包括 name、price、stock、category;
  • 统计用户行为:user:action:100为 key,field 包括 login_count(登录次数)、click_count(点击次数)。

3. List(列表):有序可重复的 “队列盒”

特性:基于双向链表实现,元素按插入顺序排列,能从头部(left)或尾部(right)加 / 删数据 —— 头部 / 尾部操作极快(O (1)),中间操作慢(O (n)),适合做队列或栈。

常用命令表

命令

作用

示例操作

结果 / 说明

lpush key val...

从头部加元素

lpush todo "吃饭" "睡觉" "工作"

(integer) 3(列表长度)

rpush key val...

从尾部加元素

rpush todo "运动"

(integer) 4

lrange key s e

取指定范围元素

lrange todo 0 -1(0=-1 表示所有)

1) "工作" 2) "睡觉" 3) "吃饭" 4) "运动"(lpush 是逆序加)

lpop key

从头部删元素

lpop todo

"工作"(返回删除的元素)

rpop key

从尾部删元素

rpop todo

"运动"

典型场景

  • 消息队列:用rpush加消息(生产者),lpop取消息(消费者),实现 “先进先出”;
  • 最新列表:存 “用户最近浏览的 5 个商品”,新浏览的用lpush加,用lrange 0 4取前 5 个;
  • 栈:用lpush入栈,lpop出栈,实现 “先进后出”(比如 undo 操作记录)。

4. Set(集合):去重 + 关系计算的 “神器”

特性:无序、不可重复(加重复元素会自动忽略),底层是哈希表 —— 判断元素是否存在极快(O (1)),还支持交集、并集、差集,适合去重和关系计算。

常用命令表

命令

作用

示例操作

结果 / 说明

sadd key val...

加元素(自动去重)

sadd user:100:tags "篮球" "音乐" "篮球"

(integer) 2(重复的 “篮球” 只算 1 个)

smembers key

取所有元素

smembers user:100:tags

1) "篮球" 2) "音乐"(无序)

sismember key val

判断元素是否存在

sismember user:100:tags "足球"

(integer) 0(不存在)

sinter k1 k2

求两个集合的交集

sadd user:101:tags "音乐" "电影" → sinter user:100:tags user:101:tags

1) "音乐"(共同标签)

典型场景

  • 标签去重:存用户兴趣标签,避免重复;
  • 共同好友:求用户 A 和 B 的共同好友 ——sinter user:A:friends user:B:friends;
  • 独立统计:统计 “今日访问网站的独立用户 ID”,用sadd加 ID,scard key查数量(scard 是查集合大小)。

5. Zset(有序集合):做排行榜的 “专家”

特性:在 Set 基础上给每个元素加 “分数(score)”,按分数从小到大排序(分数可重复,元素不可重复)—— 底层是跳表,支持按分数 / 排名查数据,做排行榜超方便。

常用命令表

命令

作用

示例操作

结果 / 说明

zadd key s val...

加元素(带分数)

zadd rank:score 85 小明 92 小红 78 小刚

(integer) 3

zrange key s e withscores

升序取元素(带分数)

zrange rank:score 0 -1 withscores

1) "小刚" 2) "78" 3) "小明" 4) "85" 5) "小红" 6) "92"

zrevrange key s e withscores

降序取元素(带分数)

zrevrange rank:score 0 1 withscores

1) "小红" 2) "92" 3) "小明" 4) "85"(取前 2 名)

zincrby key num val

元素分数自增

zincrby rank:score 3 小明

"88"(85+3=88)

典型场景

  • 排行榜:做 “考试分数排行榜”,用zrevrange取前 10 名;
  • 延迟队列:用时间戳当分数,zadd加任务,zrangebyscore key 0 当前时间取到期任务;
  • 分数筛选:找 “分数≥90 的学生”——zrangebyscore rank:score 90 +inf(+inf 表示无穷大)。

三、Redis 键(key)命名规范:让数据 “好管理”

不管用哪种数据类型,key 都是数据的 “身份证”—— 如果 key 命名混乱(比如a1、user123、Product_100),后续维护会很头疼。推荐 “业务:对象:ID: 属性” 的格式,遵循 4 个原则:

  1. 用冒号(:)分层:比如order:200:status(业务 = order,对象 = 200,属性 = status),一眼能看懂含义;
  1. 全小写 + 下划线:Redis key 区分大小写(User:100和user:100是两个 key),全小写能避免混淆;
  1. 带业务标识:比如cart:100:items(购物车业务)、log:login:202405(登录日志业务),便于区分不同业务数据;
  1. 不长不短:太长会占内存(比如this_is_user_id_100_name),太短语义不清(比如u100n),适中最好。

规范示例

  • String 类型:verify:code:138xxxx8888(验证码);
  • Hash 类型:user:100:info(用户详情);
  • List 类型:user:100:recent:products(用户最近浏览商品);
  • Set 类型:product:200:tags(商品标签);
  • Zset 类型:rank:game:score(游戏积分排行榜)。

四、总结:Redis 选型 “一句话口诀”

学完这些内容,记住一句口诀,就能快速选对数据类型:

  • 存单一值(计数器、验证码)→ 用 String;
  • 存对象(用户、商品)→ 用 Hash;
  • 存有序列表(队列、最新记录)→ 用 List;
  • 要去重或算关系(标签、共同好友)→ 用 Set;
  • 做排序或排行榜(分数、排名)→ 用 Zset。

基础命令方面,Select、Dbsize 是日常操作,Flushdb、Flushall 要谨慎;key 命名按规范来,后续维护能省很多事。Redis 的高级特性(如持久化、集群)可以慢慢学,但先把这些基础用熟,就能应对大部分开发场景了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小辉编程充电站

技术路有你,打赏助我分享

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值