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 makeUbuntu 系统使用:
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 OK7.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,转载请注明出处。
