Redis 完整入门指南 | 零基础小白也能轻松掌握的缓存神器
📢 写在前面
如果你正在学习 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
⚠️ 严重警告:
FLUSHDB和FLUSHALL是不可逆操作,数据删除后无法恢复!学习时可以随便玩,工作中千万别用!
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 |
测试连接 | PING → PONG |
八、全文总结 & 学习建议 📚
8.1 本文知识点回顾
恭喜你看到这里!🎉 让我们快速回顾一下本文的 核心知识点:
✅ Redis 是什么:开源的、基于内存的、键值对 NoSQL 数据库
✅ 为什么用:速度快、抗高并发、保护数据库、功能丰富
✅ 核心特点:内存存储、支持持久化、多数据类型、原子操作、支持集群
✅ 应用场景:缓存、Session、排行榜、计数器、秒杀、消息队列
✅ 安装部署:Windows 解压即用、Linux 编译安装,启动后
ping→PONG验证✅ 五大数据类型:
- String → 万能型(缓存、计数器)
- List → 排队型(消息列表)
- Set → 去重型(标签、共同好友)
- Hash → 对象型(用户信息)
- ZSet → 排名型(排行榜)
✅ 通用命令:KEYS、EXISTS、DEL、EXPIRE、TTL、SELECT、TYPE 等
8.2 新手入门学习建议
🎯 当前阶段你应该做到:
- 理解 Redis 是什么,能向别人解释清楚
- 在本机成功安装并启动 Redis
- 熟练使用五大数据类型的基础命令
- 了解 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,转载请注明出处。
更多推荐




所有评论(0)