📢 写在前面

如果你正在学习 Java 后端开发,你一定遇到过这些问题:

  • 数据库查询一多,页面加载就慢得像蜗牛🐌
  • 用户一多,服务器直接卡死甚至崩溃💥
  • 面试官问你 "缓存怎么做的?",你一脸懵逼😰

别慌!这些问题的背后,都指向同一个答案 —— Redis

本文专为 编程零基础 / Java 后端初学者 量身打造,从 "Redis 是什么" 到 "亲手敲命令操作",全程大白话 + 实操代码,保证你从零看懂、学完即用!

建议收藏 ⭐,反复练习!


📑 文章导航

表格

章节 内容
Redis 是什么?
为什么要用 Redis?
Redis 核心特点
Redis 应用场景
Redis 安装部署(Windows + Linux)
五大基础数据类型详解
常用基础命令实操
全文总结 & 学习建议

一、Redis 是什么? 🤔

1.1 一句话定义

Redis(Remote Dictionary Server,远程字典服务)是一款 开源的、基于内存的、键值对(Key-Value)结构的 NoSQL 数据库

拆开来理解:

  • 开源:免费使用,全世界开发者都在用
  • 基于内存:数据存在内存里,所以读写速度极快
  • 键值对:数据以 key = value 的形式存储,就像一本 "字典"
  • NoSQL:不是传统的关系型数据库(如 MySQL),不用写 SQL 语句

简单类比 🎯

如果把 MySQL 比作一个大型仓库(容量大但找东西慢),那 Redis 就是你桌面上的便签本(容量小但查找飞快)。你把最常用的信息贴在便签上,用的时候一眼就能看到,不用每次都跑去仓库翻找。

1.2 Redis vs MySQL 核心对比

很多新手分不清 Redis 和 MySQL 的区别,看这张表就够了:

表格

对比项 MySQL Redis
数据存储位置 磁盘(硬盘) 内存(RAM)
读写速度 较慢(毫秒级) 极快(微秒级)
数据结构 表格(行和列) 键值对(Key-Value)
查询方式 SQL 语句 专用命令
数据量 适合大量数据持久存储 适合热点数据临时缓存
主要角色 主数据库(存数据的 "家") 缓存层(加速的 "助手")
是否支持持久化 ✅ 天然支持 ✅ 支持(需配置)

⚠️ 重点理解:Redis 不是用来替代 MySQL 的,而是和 MySQL 搭配使用。MySQL 负责存储全量数据,Redis 负责缓存高频访问的热点数据,两者


二、为什么要用 Redis? 💡

在回答 "为什么" 之前,我们先看一个真实场景

场景模拟 🎬

假设你开发了一个电商网站,首页需要展示热门商品列表

没有 Redis 时:

用户A访问首页 → 查询MySQL → 返回商品列表(耗时 200ms)
用户B访问首页 → 查询MySQL → 返回商品列表(耗时 200ms)
用户C访问首页 → 查询MySQL → 返回商品列表(耗时 200ms)
......
1000个用户同时访问 → MySQL 疯狂查询 → 数据库扛不住 → 💥崩溃!

用了 Redis 之后:

第1次请求 → 查MySQL → 结果存入Redis缓存(耗时 200ms)
用户B访问 → 直接从Redis读取 → 返回结果(耗时 1ms)✅
用户C访问 → 直接从Redis读取 → 返回结果(耗时 1ms)✅
......
1000个用户同时访问 → Redis轻松应对 → MySQL毫无压力 → 😎稳如老狗!

💡 核心原因:Redis 基于内存,读写速度是 MySQL 的 几十倍甚至上百倍,能轻松扛住高并发请求,大幅减轻数据库压力。


用 Redis 的三大理由

表格

理由 说明
🚀 速度快 基于内存操作,官方数据:读写性能可达 10 万 + 次 / 秒
🛡️ 保护数据库 作为缓存层拦截大量请求,避免 MySQL 被打垮
🧩 功能丰富 不只是缓存,还能做消息队列、排行榜、分布式锁等

三、Redis 核心特点 ⭐

以下是 Redis 最核心的 五大特点,面试常考,务必记住:

① 基于内存,速度极快 🚀

Redis 将所有数据存储在 内存 中,读写操作不需要磁盘 I/O,单机可达 10 万 + QPS(每秒查询次数)。

② 支持数据持久化 💾

虽然数据在内存中,但 Redis 支持将数据 定期保存到磁盘,即使服务器重启,数据也不会丢失。

主要两种持久化方式:RDB(快照)和 AOF(日志追加),入门阶段了解即可,后续进阶再深入学习。

③ 支持多种数据类型 📦

不只是简单的字符串,Redis 支持 5 种基础数据类型

  • String(字符串)
  • List(列表)
  • Set(集合)
  • Hash(哈希 / 散列)
  • Sorted Set / ZSet(有序集合)

④ 操作具有原子性 ⚛️

Redis 的单个命令都是原子操作(要么成功、要么失败,不会出现 "执行一半" 的情况),天然适合做计数器、分布式锁等场景。

⑤ 支持高并发与集群 🌐

Redis 天然支持主从复制、哨兵模式、集群模式,轻松应对大规模高并发


四、Redis 应用场景 🎯

Redis 在实际开发中用途非常广泛,以下是最常见的 6 大场景:

表格

场景 说明 用到的数据类型
🔥 热点数据缓存 首页商品、热搜新闻等高频数据缓存 String / Hash
👤 会话 (Session) 存储 用户登录状态、Token 令牌存储 String
🏆 排行榜 游戏积分排名、商品销量排行 ZSet
🔢 计数器 文章阅读量、视频播放次数、点赞数 String(INCR)
⚡ 秒杀 / 限流 电商秒杀库存扣减、接口访问频率限制 String / List
📨 消息队列(轻量级) 简单的异步任务处理、通知推送 List / Stream

💡 新手记忆技巧:只要你发现某个数据 "读取频率高、变化频率低、对速度要求高",就可以考虑用 Redis 来缓存


五、Redis 安装部署 🛠️

⚠️ 说明:Redis 官方推荐在 Linux 环境下使用。Windows 版本是社区维护的非官方版本,仅建议学习使用。


5.1 Windows 安装(极简傻瓜版)✅

第一步:下载 Redis

前往 GitHub 下载 Windows 版 Redis:

🔗 下载地址:https://github.com/tporadowski/redis/releases

选择最新版本的 .zip 压缩包下载(如 Redis-x64-5.0.14.1.zip

第二步:解压即用

将压缩包解压到任意目录(建议路径不含中文和空格),例如:

D:\Redis\

解压后目录结构如下:

D:\Redis\
├── redis-server.exe      ← Redis 服务端(启动服务)
├── redis-cli.exe         ← Redis 客户端(输入命令)
├── redis.windows.conf    ← 配置文件
└── ...其他文件

第三步:启动 Redis 服务

方式一:直接双击启动

双击 redis-server.exe,看到如下界面说明 启动成功

[28896] 01 Jan 2024 12:00:00.000 # Redis version=5.0.14.1, bits=64
[28896] 01 Jan 2024 12:00:00.000 # Running in standalone mode
[28896] 01 Jan 2024 12:00:00.000 # Server initialized
[28896] 01 Jan 2024 12:00:00.000 * Ready to accept connections

⚠️ 注意:这个窗口不能关闭!关闭就等于停止了 Redis 服务。

方式二:命令行启动(推荐)

打开 CMD,切换到 Redis 目录:

# 进入Redis所在目录
cd D:\Redis

# 启动Redis服务(使用配置文件)
redis-server.exe redis.windows.conf

第四步:连接测试

另开一个 CMD 窗口(注意:服务端窗口不要关),执行:

# 进入Redis目录
cd D:\Redis

# 启动客户端连接
redis-cli.exe

# 测试连接(输入ping,返回PONG就是成功)
127.0.0.1:6379> ping
PONG

看到 PONG 就说明 Redis 安装成功,可以正常


🔧 常见问题排查

表格

问题 解决方案
双击 redis-server 闪退 用 CMD 启动,查看具体报错信息
端口 6379 被占用 修改配置文件中 port 参数,或关闭占用端口的程序
提示找不到命令 确认 CMD 已切换到 Redis 所在目录

5.2 Linux 安装(CentOS / Ubuntu)✅

CentOS 7 为例,其他 Linux 发行版操作类似。

第一步:安装编译依赖

# 安装gcc编译器(Redis是C语言写的,需要编译)
sudo yum install -y gcc make

Ubuntu 系统使用:sudo apt install -y gcc make

第二步:下载 Redis

# 进入软件下载目录
cd /usr/local/src

# 下载Redis安装包(以7.2.4版本为例)
wget https://download.redis.io/releases/redis-7.2.4.tar.gz

# 解压
tar -xzf redis-7.2.4.tar.gz

# 进入解压后的目录
cd redis-7.2.4

第三步:编译安装

# 编译
make

# 安装到指定目录
make install PREFIX=/usr/local/redis

等待编译完成,出现 Hint: It's a good idea to run 'make test' 说明 编译成功

第四步:配置 Redis

# 复制配置文件到安装目录
cp /usr/local/src/redis-7.2.4/redis.conf /usr/local/redis/

# 编辑配置文件
vi /usr/local/redis/redis.conf

修改以下关键配置:

# 允许后台运行(改为yes)
daemonize yes

# 允许远程连接(注释掉这一行,前面加#)
# bind 127.0.0.1 -::1

# 设置访问密码(可选,建议设置)
requirepass your_password_here

# 关闭保护模式(如需远程访问)
protected-mode no

⚠️ 新手提示:在 vi 编辑器中,按 i 进入编辑模式,修改后按 Esc,输入 :wq 保存退出。

第五步:启动 Redis

# 使用配置文件启动
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf

# 检查是否启动成功
ps -ef | grep redis

看到 redis-server 进程说明 启动成功

第六步:连接测试

# 启动客户端
/usr/local/redis/bin/redis-cli

# 如果设置了密码,需要先认证
127.0.0.1:6379> auth your_password_here
OK

# 测试连接
127.0.0.1:6379> ping
PONG

补充:常用管理命令

# 停止Redis服务
/usr/local/redis/bin/redis-cli shutdown

# 查看Redis运行状态
/usr/local/redis/bin/redis-cli info

# 设置开机自启(创建systemd服务文件)
sudo vi /etc/systemd/system/redis.service

开机自启的服务文件内容:

[Unit]
Description=Redis Server
After=network.target

[Service]
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf
ExecStop=/usr/local/redis/bin/redis-cli shutdown
Restart=always

[Install]
WantedBy=multi-user.target
# 启用开机自启
sudo systemctl enable redis
sudo systemctl start redis<!-- 【配图位置⑦】:建议截图Linux终端中Redis编译成功、启动成功、ping测试PONG的完整过程 -->

---

# 六、五大基础数据类型详解 📦

这是 Redis 最核心的知识点,**面试必问、开发必用**,一定要掌握<!-- 【配图位置⑧】:建议放一张五大数据类型的总览图,每个类型配一个小图标和一句话描述 -->

---

## 6.1 String(字符串)🔤

### 是什么?

Redis 中 **最基础、最常用** 的数据类型。一个 key 对应一个 value,value 可以是字符串、数字,**最大可存储 512MB** 数据。

### 适用场景

- 缓存用户信息、商品信息
- 计数器(阅读量、点赞数)
- Session 会话存储
- 分布式锁

### 核心命令

```bash
# ========== 基础存取 ==========

# SET:存值(设置键值对)
127.0.0.1:6379> SET name "张三"
OK

# GET:取值
127.0.0.1:6379> GET name
"张三"

# DEL:删除
127.0.0.1:6379> DEL name
(integer) 1


# ========== 设置过期时间 ==========

# SETEX:存值 + 设置过期时间(单位:秒)
# 比如:验证码5分钟后过期
127.0.0.1:6379> SETEX verify_code 300 "886655"
OK

# TTL:查看剩余过期时间(-1表示永不过期,-2表示已过期/不存在)
127.0.0.1:6379> TTL verify_code
(integer) 298


# ========== 数值操作(计数器)==========

# SET 一个数值
127.0.0.1:6379> SET article:1001:views 0
OK

# INCR:自增1(原子操作,天然线程安全!)
127.0.0.1:6379> INCR article:1001:views
(integer) 1

127.0.0.1:6379> INCR article:1001:views
(integer) 2

# INCRBY:自增指定数值
127.0.0.1:6379> INCRBY article:1001:views 10
(integer) 12

# DECR:自减1
127.0.0.1:6379> DECR article:1001:views
(integer) 11


# ========== 批量操作 ==========

# MSET:批量存值(一次存多个,效率更高)
127.0.0.1:6379> MSET name "李四" age "25" city "北京"
OK

# MGET:批量取值
127.0.0.1:6379> MGET name age city
1) "李四"
2) "25"
3) "北京"


# ========== 其他常用 ==========

# SETNX:只在key不存在时才设置(用于分布式锁)
127.0.0.1:6379> SETNX lock:order "locked"
(integer) 1    ← 设置成功(key之前不存在)

127.0.0.1:6379> SETNX lock:order "locked"
(integer) 0    ← 设置失败(key已存在)

# STRLEN:获取字符串长度
127.0.0.1:6379> STRLEN name
(integer) 6

💡 实用技巧:Redis 的 key 命名推荐使用 冒号分隔 的命名规范,如 业务:对象:id:属性,例如 user:1001:name,清晰又规范。


6.2 List(列表)📋

是什么?

有序、可重复 的字符串列表,底层类似 双向链表。可以从左边或右边插入和弹出元素。

大白话:就像排队一样,可以从队头或队尾加人、移人,而且允许重复排队。

适用场景

  • 消息队列(简单版)
  • 最新消息列表(朋友圈、微博 Timeline)
  • 文章评论列表

核心命令

# ========== 插入元素 ==========

# LPUSH:从左边(头部)插入
127.0.0.1:6379> LPUSH news "新闻C" "新闻B" "新闻A"
(integer) 3
# 此时列表:新闻A → 新闻B → 新闻C

# RPUSH:从右边(尾部)插入
127.0.0.1:6379> RPUSH news "新闻D"
(integer) 4
# 此时列表:新闻A → 新闻B → 新闻C → 新闻D


# ========== 查看元素 ==========

# LRANGE:查看指定范围的元素(0 -1 表示查看全部)
127.0.0.1:6379> LRANGE news 0 -1
1) "新闻A"
2) "新闻B"
3) "新闻C"
4) "新闻D"

# LRANGE:查看前3条
127.0.0.1:6379> LRANGE news 0 2
1) "新闻A"
2) "新闻B"
3) "新闻C"

# LINDEX:按索引取值(从0开始)
127.0.0.1:6379> LINDEX news 1
"新闻B"

# LLEN:获取列表长度
127.0.0.1:6379> LLEN news
(integer) 4


# ========== 弹出元素 ==========

# LPOP:从左边弹出一个元素(取出并删除)
127.0.0.1:6379> LPOP news
"新闻A"

# RPOP:从右边弹出一个元素
127.0.0.1:6379> RPOP news
"新闻D"

# 查看剩余元素
127.0.0.1:6379> LRANGE news 0 -1
1) "新闻B"
2) "新闻C"

💡 应用示例:微博最新消息列表 —— 新消息用 LPUSH 从左边推入,用 LRANGE 0 9 取最新 10 条展示。


6.3 Set(集合)🎲

是什么?

无序、不可重复 的字符串集合。自动去重!还支持集合间的交集、并集、差集运算。

大白话:像一个 "不允许放重复东西的袋子",而且袋子里的东西没有固定顺序。

适用场景

  • 标签系统(用户标签、文章标签)
  • 共同好友 / 共同关注
  • 抽奖活动(随机抽取)
  • 数据去重

核心命令

# ========== 基础操作 ==========

# SADD:添加元素(自动去重)
127.0.0.1:6379> SADD tags "Java" "Redis" "MySQL" "Java"
(integer) 3    ← 只成功添加了3个(Java重复了)

# SMEMBERS:查看集合所有元素
127.0.0.1:6379> SMEMBERS tags
1) "Redis"
2) "MySQL"
3) "Java"

# SCARD:获取集合元素个数
127.0.0.1:6379> SCARD tags
(integer) 3

# SISMEMBER:判断元素是否在集合中(1=在,0=不在)
127.0.0.1:6379> SISMEMBER tags "Java"
(integer) 1

127.0.0.1:6379> SISMEMBER tags "Python"
(integer) 0

# SREM:移除指定元素
127.0.0.1:6379> SREM tags "MySQL"
(integer) 1


# ========== 随机操作(抽奖场景)==========

# SRANDMEMBER:随机取出元素(不删除)
127.0.0.1:6379> SRANDMEMBER tags 1
1) "Java"

# SPOP:随机弹出元素(取出并删除,适合抽奖)
127.0.0.1:6379> SPOP tags 1
1) "Redis"


# ========== 集合运算(共同好友场景)==========

# 准备两个用户的关注列表
127.0.0.1:6379> SADD user:1:follow "张三" "李四" "王五"
(integer) 3
127.0.0.1:6379> SADD user:2:follow "李四" "王五" "赵六"
(integer) 3

# SINTER:交集(共同关注)
127.0.0.1:6379> SINTER user:1:follow user:2:follow
1) "李四"
2) "王五"

# SUNION:并集(所有关注的人)
127.0.0.1:6379> SUNION user:1:follow user:2:follow
1) "张三"
2) "李四"
3) "王五"
4) "赵六"

# SDIFF:差集(我关注了但对方没关注的)
127.0.0.1:6379> SDIFF user:1:follow user:2:follow
1) "张三"

6.4 Hash(哈希)#️⃣

是什么?

一个 key 对应一个 "字段 - 值" 的映射表,特别适合存储 对象

大白话:如果 String 是 "一个抽屉放一样东西",那 Hash 就是 "一个抽屉里分了好几个格子,每个格子放不同东西"。

适用场景

  • 存储对象信息(用户信息、商品信息)—— 最核心的用途
  • 购物车

核心命令

# ========== 存储用户信息 ==========

# HSET:设置hash中某个字段的值
127.0.0.1:6379> HSET user:1001 name "张三"
(integer) 1
127.0.0.1:6379> HSET user:1001 age "25"
(integer) 1
127.0.0.1:6379> HSET user:1001 city "深圳"
(integer) 1

# 也可以一次性设置多个字段
127.0.0.1:6379> HSET user:1002 name "李四" age "28" city "北京"
(integer) 3


# ========== 读取信息 ==========

# HGET:获取某个字段的值
127.0.0.1:6379> HGET user:1001 name
"张三"

# HMGET:批量获取多个字段
127.0.0.1:6379> HMGET user:1001 name age city
1) "张三"
2) "25"
3) "深圳"

# HGETALL:获取所有字段和值
127.0.0.1:6379> HGETALL user:1001
1) "name"
2) "张三"
3) "age"
4) "25"
5) "city"
6) "深圳"

# HKEYS:获取所有字段名
127.0.0.1:6379> HKEYS user:1001
1) "name"
2) "age"
3) "city"

# HVALS:获取所有字段值
127.0.0.1:6379> HVALS user:1001
1) "张三"
2) "25"
3) "深圳"


# ========== 其他操作 ==========

# HDEL:删除某个字段
127.0.0.1:6379> HDEL user:1001 city
(integer) 1

# HEXISTS:判断字段是否存在
127.0.0.1:6379> HEXISTS user:1001 name
(integer) 1

# HLEN:获取字段数量
127.0.0.1:6379> HLEN user:1001
(integer) 2

# HINCRBY:字段值自增(适合购物车数量增减)
127.0.0.1:6379> HSET cart:user1001 item:2001 1
(integer) 1
127.0.0.1:6379> HINCRBY cart:user1001 item:2001 2
(integer) 3    ← 商品数量变为3

💡 Hash vs String 存对象的区别

  • String 存对象需要将整个对象序列化为 JSON,修改某个字段需要取出→反序列化→修改→序列化→存回
  • Hash 可以单独修改某个字段,更灵活、更节省网络开销
  • 建议:存储对象信息优先使用 Hash

6.5 ZSet / Sorted Set(有序集合)🏆

是什么?

和 Set 类似(不可重复),但每个元素都关联一个 分数(score),Redis 会按照分数 自动排序

大白话:就像考试成绩单,每个同学有一个分数,自动按分数从低到高排列。

适用场景

  • 排行榜(游戏积分、商品销量、热搜榜)—— 最经典的场景
  • 带权重的消息队列
  • 延迟队列

核心命令

# ========== 构建游戏积分排行榜 ==========

# ZADD:添加元素及分数
127.0.0.1:6379> ZADD game:rank 1500 "玩家A"
(integer) 1
127.0.0.1:6379> ZADD game:rank 2800 "玩家B"
(integer) 1
127.0.0.1:6379> ZADD game:rank 2200 "玩家C"
(integer) 1
127.0.0.1:6379> ZADD game:rank 3500 "玩家D"
(integer) 1
127.0.0.1:6379> ZADD game:rank 1800 "玩家E"
(integer) 1


# ========== 查看排行 ==========

# ZRANGE:按分数从低到高排列(升序)
127.0.0.1:6379> ZRANGE game:rank 0 -1
1) "玩家A"
2) "玩家E"
3) "玩家C"
4) "玩家B"
5) "玩家D"

# ZREVRANGE:按分数从高到低排列(降序)—— 排行榜常用!
127.0.0.1:6379> ZREVRANGE game:rank 0 -1
1) "玩家D"
2) "玩家B"
3) "玩家C"
4) "玩家E"
5) "玩家A"

# WITHSCORES:连同分数一起显示
127.0.0.1:6379> ZREVRANGE game:rank 0 2 WITHSCORES
1) "玩家D"
2) "3500"
3) "玩家B"
4) "2800"
5) "玩家C"
6) "2200"


# ========== 查询与修改 ==========

# ZSCORE:查看某个成员的分数
127.0.0.1:6379> ZSCORE game:rank "玩家B"
"2800"

# ZRANK:查看成员排名(升序排名,从0开始)
127.0.0.1:6379> ZRANK game:rank "玩家D"
(integer) 4    ← 升序中排第5位(索引4)

# ZREVRANK:查看成员排名(降序排名,从0开始)
127.0.0.1:6379> ZREVRANK game:rank "玩家D"
(integer) 0    ← 降序中排第1位(索引0)

# ZINCRBY:给成员增加分数
127.0.0.1:6379> ZINCRBY game:rank 500 "玩家A"
"2000"    ← 玩家A分数从1500变为2000

# ZCARD:获取集合元素总数
127.0.0.1:6379> ZCARD game:rank
(integer) 5

# ZREM:移除成员
127.0.0.1:6379> ZREM game:rank "玩家E"
(integer) 1

# ZCOUNT:统计指定分数范围内的元素个数
127.0.0.1:6379> ZCOUNT game:rank 2000 3000
(integer) 2    ← 分数在2000~3000之间有2个玩家

🔑 五大数据类型速查对比表

表格

类型 特点 典型场景 记忆口诀
String 最简单,一个 key 一个 value 缓存、计数器、Session 万能型
List 有序、可重复、双向操作 消息列表、时间线 排队型
Set 无序、不重复、集合运算 标签、去重、共同好友 去重型
Hash 字段 - 值映射、适合存对象 用户信息、购物车 对象型
ZSet 不重复、有分数、自动排序 排行榜、延迟队列 排名型

七、常用基础命令实操 ⌨️

除了各数据类型的专属命令,Redis 还有一些 通用命令,操作所有类型的 key 都能用。


7.1 Key(键)通用管理命令

# ========== 查看Key ==========

# KEYS pattern:查找匹配的key(*表示所有)
127.0.0.1:6379> KEYS *
1) "name"
2) "user:1001"
3) "game:rank"

# KEYS user*:查找以user开头的key
127.0.0.1:6379> KEYS user*
1) "user:1001"
2) "user:1002"

# EXISTS:判断key是否存在(1=存在,0=不存在)
127.0.0.1:6379> EXISTS name
(integer) 1

# TYPE:查看key的数据类型
127.0.0.1:6379> TYPE name
string

127.0.0.1:6379> TYPE game:rank
zset


# ========== 删除Key ==========

# DEL:删除一个或多个key
127.0.0.1:6379> DEL name
(integer) 1

# DEL:批量删除
127.0.0.1:6379> DEL key1 key2 key3
(integer) 3

# UNLINK:异步删除(大key时推荐,不阻塞服务器)
127.0.0.1:6379> UNLINK big_key
(integer) 1


# ========== 重命名 ==========

# RENAME:重命名key
127.0.0.1:6379> SET old_name "hello"
OK
127.0.0.1:6379> RENAME old_name new_name
OK
127.0.0.1:6379> GET new_name
"hello"

⚠️ 注意:在生产环境中,禁止使用 KEYS * 命令!当数据量很大时,这个命令会 阻塞 Redis 服务器。可使用 SCAN 命令代替。


7.2 过期时间相关命令

# ========== 设置过期时间 ==========

# EXPIRE:给已存在的key设置过期时间(单位:秒)
127.0.0.1:6379> SET token "abc123"
OK
127.0.0.1:6379> EXPIRE token 3600
(integer) 1    ← 设置成功,3600秒(1小时)后自动删除

# PEXPIRE:设置过期时间(单位:毫秒)
127.0.0.1:6379> PEXPIRE token 60000
(integer) 1    ← 60000毫秒(60秒)后过期

# SETEX:SET + EXPIRE 二合一(推荐!)
127.0.0.1:6379> SETEX session:user1001 1800 "session_data_xxx"
OK    ← 设置值并同时指定1800秒过期


# ========== 查看过期时间 ==========

# TTL:查看剩余过期时间(单位:秒)
127.0.0.1:6379> TTL token
(integer) 3540
# 返回值说明:
#   正数 → 剩余秒数
#   -1   → 永不过期(没设置过期时间)
#   -2   → key不存在或已过期

# PTTL:查看剩余过期时间(单位:毫秒)
127.0.0.1:6379> PTTL token
(integer) 3540000


# ========== 取消过期时间 ==========

# PERSIST:移除过期时间,使key变为永久有效
127.0.0.1:6379> PERSIST token
(integer) 1

127.0.0.1:6379> TTL token
(integer) -1    ← 变成永不过期

7.3 数据库切换命令

Redis 默认有 16 个数据库(编号 0~15),默认使用 0 号库

# SELECT:切换数据库
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]>    ← 注意提示符变了,表示当前在1号库

127.0.0.1:6379[1]> SELECT 0
OK
127.0.0.1:6379>       ← 回到0号库

# DBSIZE:查看当前库的key数量
127.0.0.1:6379> DBSIZE
(integer) 5

# FLUSHDB:清空当前库(⚠️危险操作!)
127.0.0.1:6379> FLUSHDB
OK

# FLUSHALL:清空所有库(⚠️极度危险!生产环境严禁使用!)
127.0.0.1:6379> FLUSHALL
OK

⚠️ 严重警告FLUSHDBFLUSHALL不可逆操作,数据删除后无法恢复!学习时可以随便玩,工作中千万别用!


7.4 服务器信息命令

# INFO:查看Redis服务器信息
127.0.0.1:6379> INFO
# 会返回大量信息,包括版本、内存使用、客户端连接数等

# INFO memory:只看内存信息
127.0.0.1:6379> INFO memory
# used_memory_human:1.52M    ← 当前使用了1.52MB内存

# CONFIG GET *:查看所有配置
127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "0"    ← 0表示无上限

# SAVE:手动触发持久化(将内存数据保存到磁盘)
127.0.0.1:6379> SAVE
OK

7.5 命令速查表 📝

表格

命令 说明 示例
SET key value 存值 SET name "张三"
GET key 取值 GET name
DEL key 删除 DEL name
EXISTS key 判断是否存在 EXISTS name
KEYS pattern 查找 key KEYS user*
TYPE key 查看类型 TYPE name
EXPIRE key seconds 设置过期时间 EXPIRE name 60
TTL key 查看剩余时间 TTL name
PERSIST key 取消过期 PERSIST name
SELECT index 切换数据库 SELECT 1
DBSIZE 当前库 key 数量 DBSIZE
FLUSHDB 清空当前库 FLUSHDB
PING 测试连接 PINGPONG

八、全文总结 & 学习建议 📚

8.1 本文知识点回顾

恭喜你看到这里!🎉 让我们快速回顾一下本文的 核心知识点

Redis 是什么:开源的、基于内存的、键值对 NoSQL 数据库

为什么用:速度快、抗高并发、保护数据库、功能丰富

核心特点:内存存储、支持持久化、多数据类型、原子操作、支持集群

应用场景:缓存、Session、排行榜、计数器、秒杀、消息队列

安装部署:Windows 解压即用、Linux 编译安装,启动后 pingPONG 验证

五大数据类型

  • String → 万能型(缓存、计数器)
  • List → 排队型(消息列表)
  • Set → 去重型(标签、共同好友)
  • Hash → 对象型(用户信息)
  • ZSet → 排名型(排行榜)

通用命令:KEYS、EXISTS、DEL、EXPIRE、TTL、SELECT、TYPE 等


8.2 新手入门学习建议

🎯 当前阶段你应该做到:

  1. 理解 Redis 是什么,能向别人解释清楚
  2. 在本机成功安装并启动 Redis
  3. 熟练使用五大数据类型的基础命令
  4. 了解 Redis 的应用场景,知道什么时候该用 Redis

🚀 后续进阶学习路线:

学完本文基础后,建议按照以下路线继续深入:

第一阶段(巩固基础)
  └── 在 Java 项目中集成 Redis(Spring Boot + Spring Data Redis / Jedis / Lettuce)
  └── 练习在真实项目中使用缓存

第二阶段(核心进阶)
  └── Redis 持久化机制详解(RDB vs AOF)
  └── Redis 过期策略 & 内存淘汰策略
  └── Redis 事务与 Lua 脚本

第三阶段(高频面试)
  └── 缓存穿透、缓存击穿、缓存雪崩(原理 + 解决方案)
  └── Redis 分布式锁实现
  └── Redis 与数据库双写一致性

第四阶段(架构进阶)
  └── Redis 主从复制
  └── Redis 哨兵模式(Sentinel)
  └── Redis Cluster 集群
  └── Redis 性能优化与监控

📖 推荐学习资源:

表格

资源类型 推荐内容
官方文档 https://redis.io/docs/(最权威)
在线练习 https://try.redis.io/(在线敲命令)
可视化工具 Another Redis Desktop Manager(推荐,免费好用)
经典书籍 《Redis 设计与实现》—— 进阶阶段必读

🎁 最后的话

Redis 是 Java 后端开发者的 必备技能,无论是日常开发还是面试,Redis 的出场率都极高。

但不要贪多求快,先把 基础打牢,能在项目中正确使用 Redis 做缓存,再逐步深入底层原理和高级特性。

记住:多敲命令 > 多看理论。打开你的 redis-cli,把本文的每个命令都亲手敲一遍,比看十遍文章都管用!


📝 如果这篇文章对你有帮助,请点赞 👍 收藏 ⭐ 关注,你的支持是我持续创作的动力!

💬 有问题欢迎评论区留言,我会逐一回复!


本文作者原创,首发于 CSDN,转载请注明出处。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐