MySQL 系统学习 第六阶段:Redis + 缓存 + 高并发设计 第一章:Redis 基础
一、什么是 RedisRedisRemote Dictionary Server是一个开源的、高性能的内存键值数据库Key-Value Database。它最大的特点是数据存储在**内存RAM**中读写速度极快支持丰富的数据结构支持持久化将内存数据保存到磁盘常用于缓存、会话管理、排行榜、消息队列等场景一句话概括Redis 一个运行在内存中的高性能 Key-Value 数据库。二、为什么会有 Redis假设有一个商品详情页。每个用户访问都执行SELECT * FROM product WHERE id 1001;如果一天有100 万用户数据库就要执行100 万次 SQL如果商品信息一天几乎不变每次都查询 MySQL 就是一种浪费。于是引入 Redis用户 │ ▼ Redis缓存 │ 没有数据 ▼ MySQL第一次Redis 没有数据 ↓ 查询 MySQL ↓ 写入 Redis ↓ 返回用户第二次Redis ↓ 直接返回这样MySQL 压力降低用户响应速度提升三、Redis 和 MySQL 的区别对比项RedisMySQL数据存储内存可持久化磁盘数据模型Key-Value关系型表查询方式Key 查询SQL速度极快微秒级较慢毫秒级事务能力有限完整 ACID适合缓存、高并发、临时数据长期业务数据例如MySQLuser ------------------ id username passwordRediskeyuser:1 value { username:Tom }四、Redis 为什么这么快⭐⭐⭐⭐⭐Redis 快主要有五个原因。1. 数据存放在内存MySQLCPU ↓ 磁盘 ↓ 读取数据磁盘速度远慢于内存。RedisCPU ↓ 内存 ↓ 读取数据内存读写速度比机械硬盘快几个数量级也比 SSD 快得多。2. 单线程模型Redis 6 之前很多人误以为单线程一定慢。实际上Redis 的瓶颈通常不是 CPU而是网络和内存。单线程反而避免了锁竞争线程切换上下文切换Redis 6 开始增加了多线程用于网络 I/O但命令执行核心仍然保持串行保证简单和高效。3. 高效的数据结构Redis 不是简单的 Map。它内部针对HashListSetZSet都进行了专门优化。很多操作时间复杂度接近O(1)4. 没有复杂 SQL 解析MySQLSELECT * FROM user JOIN order ...需要SQL 解析优化器执行计划RedisGET user:1直接查 Key。5. 网络协议简单Redis 使用轻量级协议RESP客户端与服务器通信成本较低。五、Redis 是数据库吗是。但是它属于NoSQL ↓ Key-Value Database而不是Relational Database所以Redis没有SELECT JOIN GROUP BY这些 SQL。六、Redis 数据存在哪里默认RAM内存例如key user:1 ↓ value Tom存在内存。所以Redis断电理论上内存数据会丢失。七、Redis 会不会丢数据不会完全丢。因为Redis 支持1. RDB快照定时把内存保存到磁盘。例如每5分钟 保存一次优点恢复快。缺点最后几分钟数据可能丢失。2. AOFAppend Only File把每条写命令记录下来。例如SET user:1 Tom SET age 20重启重新执行这些命令。优点数据更安全。缺点文件更大。企业通常RDB AOF一起使用。八、Redis 常见应用场景1. 缓存 ⭐⭐⭐⭐⭐缓存商品详情首页数据用户信息最常见。2. 登录状态例如Token ↓ Redis ↓ 有效期3. 排行榜例如游戏积分 销售排行榜 热搜榜使用ZSet。4. 点赞例如文章点赞 取消点赞Set。5. 购物车Hash。6. 消息队列例如订单创建完成异步发送短信 发送邮件7. 分布式锁例如秒杀1000人同时购买。Redis保证库存不会超卖。九、Redis 安装与启动Windows推荐Redis for Windows学习环境。LinuxUbuntusudo apt install redis-serverCentOSsudo yum install redis启动redis-server连接redis-cli测试PING返回PONG说明 Redis 正常运行。十、Redis 基本命令设置数据SET name Tom返回OK获取数据GET name返回Tom删除数据DEL name判断是否存在EXISTS name返回1存在。0不存在。设置过期时间EXPIRE name 6060 秒后自动删除。查看剩余时间TTL name返回35表示还有 35 秒。查看所有 Key开发环境KEYS *⚠️注意企业生产环境通常不建议使用KEYS *因为它会扫描所有 Key数据量大时会阻塞 Redis。后面会学习更适合生产环境的SCAN十一、Redis Key 命名规范企业推荐user:1 user:100 product:888 order:10001 article:10更复杂一点user:profile:1 user:token:1 product:detail:100 order:detail:888优点易读易管理避免冲突十二、Redis 与 MySQL 如何配合真实企业流程用户请求 │ ▼ 查询 Redis │ ┌───────┴────────┐ │ │ 命中缓存 未命中缓存 │ │ ▼ ▼ 返回数据 查询 MySQL │ ▼ 写入 Redis │ ▼ 返回数据这种模式叫Cache Aside旁路缓存这是企业最常见的缓存模式第四章会详细讲。十三、本章总结知识点作用Redis高性能 Key-Value 数据库数据位置内存持久化RDB、AOF为什么快内存、简单协议、高效数据结构、无 SQL 解析主要用途缓存、排行榜、锁、消息队列、登录状态常用命令SET、GET、DEL、EXPIRE、TTL、EXISTS本章核心一句话Redis 的核心价值不是替代 MySQL而是利用内存的高速读写能力减少数据库压力提高系统响应速度。思考题为什么 Redis 比 MySQL 快得多请至少说出 4 个原因。数据存储在内存而 MySQL 主要存储在磁盘。使用高效的数据结构如 Hash、ZSet。无需解析复杂 SQL直接按 Key 查询。单线程执行避免锁竞争和线程切换。Redis 和 MySQL 最大的区别是什么为什么企业通常两者配合使用而不是只用其中一个Redis 是内存 Key-Value 数据库速度快MySQL 是关系型数据库适合长期存储数据。企业通常使用Redis 做缓存MySQL 做数据存储兼顾性能和数据安全。为什么 Redis 明明把数据放在内存里却还能做到断电后恢复数据因为Redis支持持久化RDB定时生成数据快照、AOF记录写命令日志。 重启后可以从磁盘恢复数据为什么企业不推荐在生产环境使用KEYS *因为KEYS *会扫描所有 Key数据量大时会阻塞 Redis影响性能。生产环境推荐使用SCAN如果商品详情一天只更新一次但每天有 100 万次访问你会直接查 MySQL还是使用 Redis为什么Redis 因为数据更新少、访问多缓存可以减少 MySQL 压力提高响应速度。Redis 的 Key 为什么推荐使用user:1、order:1001这样的命名而不是简单使用1、1001因为可读性高、避免不同业务的key冲突、方便分类管理和批量操作