Appearance
01|认识 Redis:是什么、和 Valkey 的关系
Redis 是一个内存型的键值存储。数据放在内存里,不走磁盘,单次读写在微秒级,比磁盘数据库快三四个数量级。代价是容量受内存限制——一台机器能存几十 GB 就到头了,磁盘能存几 TB。所以 Redis 和 MySQL 不替代,是配合:MySQL 存全量数据,Redis 存热数据缓存。
存储方式很简单:一个 key 对应一个 value。SET user:1 "zhangsan" 存进去,GET user:1 取出来。值可以是简单文本,也可以是列表、哈希、集合等复杂结构。后面几篇会逐个展开。
| 维度 | Redis | MySQL |
|---|---|---|
| 存放位置 | 内存 | 磁盘 |
| 单次读写 | 微秒级 | 毫秒级 |
| 数据量 | 受内存限制(GB 级) | 受磁盘限制(TB 级) |
| 持久化 | 可选(RDB/AOF) | 默认持久 |
| 典型用途 | 缓存、计数、队列 | 业务数据存储 |
一、为什么快
三个原因,理解这些有助于后面调优:
全内存——磁盘是最大的慢因素,Redis 跳过了它。内存读写比磁盘快几个数量级,这是速度的根本来源。
单线程处理命令——Redis 核心的命令处理是单线程的,不用锁、不用线程切换。听起来单线程慢,但单线程跑内存操作比多线程跑磁盘快得多。多线程的优势在 CPU 密集场景,Redis 是 I/O 密集(内存 I/O),单线程足够。
I/O 多路复用——一个线程同时处理很多连接,靠操作系统提供的 epoll 机制,哪个连接有数据就处理哪个。不用为每个连接开一个线程,连接数成千上万也不会把系统拖垮。
后面性能调优篇会展开,这里先建立"内存 + 单线程 + 多路复用"这个基本认知。
二、Redis 和 Valkey 的关系
这是 2024 年后学 Redis 必须搞清的事。
2024 年 3 月之前:Redis 一直是开源的(BSD 许可证),社区和云厂商都基于它做产品。
2024 年 3 月:Redis 公司把 Redis 7.4 之后的许可证从 BSD 改成了 SSPL 和 RSALv2。这俩限制了云厂商把 Redis 当托管服务对外提供。AWS、Google 这些云厂商没法继续用了。
几天后:社区从 Redis 7.2.4 fork 出 Valkey,交给 Linux Foundation 维护,继续走 BSD 开源。Valkey 起源就是 Redis 7.2.4,命令、协议、数据格式都和 Redis 7.2 一样。
分叉之后两家各自发展:
- Redis:Redis 8(2025.5)改用三许可(含 AGPLv3),加了很多新特性(JSON、向量搜索等),品牌还是 Redis
- Valkey:8.x/9.x,BSD 开源,加多线程 I/O、大规模集群支持,云厂商(AWS ElastiCache 等)大量转向 Valkey
实际影响:
| 方面 | 说明 |
|---|---|
| 命令和协议 | 两家基本通用,都是 RESP 协议。客户端代码大多不用改 |
| 数据文件 | Redis 7.4+ 的 RDB 和 Valkey 不兼容。Redis 7.2 的 RDB 两边都能读 |
| 选哪个 | 新项目和云环境多选 Valkey(开源、云厂商支持);存量项目多还在 Redis |
| 教程 | 本系列命令以 RESP 协议为准,两家通用 |
"用 Redis 还是 Valkey"在命令层面不重要,学一套两边都能用。涉及高级特性(8.x 的新数据结构)才开始分叉,本系列主线讲 7.2/7.4 共通的部分。
三、Redis 用在哪些场景
理解这些场景,后面学数据类型时知道每种结构为什么这么设计:
缓存——最常见。数据库查询结果放 Redis,应用先查 Redis 命中就不用查数据库。string 类型就够用。
计数器——文章阅读量、API 调用次数。Redis 的 INCR 原子自增,string 类型。
排行榜——游戏积分排行、热帖排序。用 zset(有序集合),按分数排序天然支持。
消息队列——异步任务、解耦。list 或 stream,生产者推、消费者拉。
会话存储——用户登录态。分布式 session 放 Redis,多台应用共享。
限流——接口防刷。计数器加过期时间实现。
四、一个必须知道的坑:公网暴露
Redis 默认监听 127.0.0.1,只接受本机连接。但有人为了方便改成 bind 0.0.0.0 或者安全组放得太宽,把 6379 端口暴露到了公网——这是一个已经反复发生过的攻击路径。
攻击者连上无密码的 Redis 后,利用 CONFIG SET dir 和 CONFIG SET dbfilename 把 RDB 文件写到 /root/.ssh/authorized_keys,写入自己的 SSH 公钥,然后直接 SSH 登录服务器。Redis 本身没有文件系统沙箱,写目录和写文件名都能通过命令改。
防护措施在 安全配置 里讲,但核心原则在这里先建立:
- 生产环境 Redis 绝不监听
0.0.0.0 bind只绑内网地址- 必须设密码或 ACL
- 前面有防火墙或安全组严格限制来源
五、本系列的内容路线
后面 11 篇依次讲:安装连接(02)、数据类型(03、04)、过期和内存(05)、持久化(06)、性能(07)、主从和哨兵(08、09)、Cluster(10)、安全(11)、监控运维(12)。
学完能独立操作和运维一套 Redis——从单机缓存到集群高可用,从日常监控到故障排查。