1. Redis 是什么
Redis 全称是 Remote Dictionary Server,可以理解为一个远程字典服务。
从工程使用角度看,Redis 是一个高性能的内存型 key-value 数据库。更准确地说,它是多数据结构内存存储系统:数据主要在内存中读写,同时支持通过 RDB、AOF 或混合方式持久化到磁盘。它不只是简单的字符串缓存,还提供了 String、List、Hash、Set、ZSet、Bitmap、HyperLogLog、GEO、Stream 等数据结构,并支持复制、哨兵、集群、事务、Lua 脚本、发布订阅等能力。
典型架构位置如下:Redis 常作为 MySQL 前置缓存层,用来承接高频读请求,减少数据库压力。

这时要注意一个边界:Redis 和 MySQL 不是替代关系,而是配合关系。MySQL 负责可靠存储和复杂查询,Redis 负责高频访问、临时状态、热点数据和部分高性能数据结构场景。
2. Redis 常见用途
Redis 最常见的落地场景如下:
| 场景 | 常用能力 | 说明 |
|---|---|---|
| 分布式缓存 | String、Hash、TTL | 缓存热点数据,降低数据库压力 |
| 计数器 | String 自增命令 | 点赞数、阅读数、接口调用次数 |
| 排行榜 | ZSet | 根据 score 做实时排名 |
| 分布式锁 | SET NX EX | 控制并发互斥,避免重复执行 |
| 会话或验证码 | String、TTL | 存储短生命周期数据 |
| 抽奖和标签 | Set | 去重、交并差集合运算 |
| 签到和活跃统计 | Bitmap | 用极低内存记录布尔状态 |
| UV 估算 | HyperLogLog | 近似去重统计 |
| 附近的人或门店 | GEO | 经纬度距离计算 |
| 简单消息流 | Stream | 消息 ID、消费组、ACK |
3. Redis 的几个核心特点
Redis 被大量使用,主要来自下面几个特点。
| 特点 | 说明 |
|---|---|
| 内存读写 | 数据主要在内存中操作,访问延迟低,并可通过持久化机制落盘 |
| 数据结构丰富 | 不止 key-value 字符串,还支持列表、集合、有序集合等 |
| 支持持久化 | 可以通过 RDB、AOF 或混合方式把数据落盘 |
| 支持高可用 | 可以通过主从复制、Sentinel、Cluster 做故障转移和扩展 |
| 命令简单 | redis-cli 可以直接完成大部分管理和验证动作 |
| 生态成熟 | Java、Python、Go、Node.js 等语言都有成熟客户端 |
Redis 的价值不仅仅是高性能。真正有价值的是它把多种内存数据结构和网络服务封装到了一起,很多原本需要应用自己维护的状态,可以直接通过 Redis 命令完成。
4. 下载地址和常用资料
常用入口如下:
| 用途 | 地址 |
|---|---|
| Redis 官网 | https://redis.io/ |
| Redis 命令参考 | https://redis.io/commands/ |
| 中文命令参考 | http://doc.redisfans.com/ |
如果只是学习 Redis 基础命令,命令参考手册非常重要。很多命令不用死记,知道按数据类型查即可。
5. Redis 版本和学习路径
Redis 7 相比早期版本补充了很多新命令和改进,比如部分集合命令、Stream 能力、函数能力、ACL 细节、Cluster 管理体验等。
Redis 版本演进图如下:
学习 Redis 时建议按下面顺序走:
- 安装、启动、连接、关闭
- Key 通用命令和常用数据类型
- 持久化:RDB、AOF、混合持久化
- 事务、Pipeline、发布订阅
- 主从复制
- Sentinel 哨兵
- Cluster 集群
- 应用侧接入,例如 Spring Boot、Jedis、Lettuce、RedisTemplate
- 进阶能力:Pipeline 性能优化、Lua 脚本、ACL、安全治理和 Cluster 运维
6. CentOS 7 源码安装 Redis
下面用 CentOS 7 和 Redis 7.0.11 举例。生产环境中也可以使用包管理器、Docker 或云厂商 Redis 服务,这里先用源码安装,便于理解目录、配置和命令。
6.1 安装编译环境
先检查 gcc:
gcc -v
如果没有编译环境,安装 gcc-c++:
yum -y install gcc-c++
需要注意:CentOS 7 默认仓库里的 gcc 通常是 4.8.5,编译 Redis 7 可能会报 C 语言标准、atomic built-in 或 glibc 兼容相关错误。真实安装时建议升级到 gcc 9 或更高版本,或者改用官方包、Docker、云厂商 Redis 服务。本文保留源码安装流程,重点是理解 Redis 的目录、配置和启动方式。
6.2 解压源码包
假设安装包已经放到 /opt/software:
cd /opt/software
tar -zxvf redis-7.0.11.tar.gz
cd redis-7.0.11
6.3 编译和安装
执行:
make
make install
默认情况下,常用命令会安装到:
/usr/local/bin
可以确认一下:
ls -l /usr/local/bin/redis-*
常见命令如下:
| 命令 | 作用 |
|---|---|
| redis-server | 启动 Redis 服务端 |
| redis-cli | Redis 命令行客户端 |
| redis-benchmark | 简单压测工具 |
| redis-check-rdb | RDB 文件检查工具 |
| redis-check-aof | AOF 文件检查工具 |
7. 初始化配置文件
不要直接改源码目录里的 redis.conf,建议复制一份到自定义目录。下面的 /myredis 是学习环境路径,方便集中查看配置、日志和数据文件;生产环境更常见的做法是使用 /etc/redis/redis-6379.conf、/var/lib/redis/6379、/var/log/redis/ 这类标准化目录。
mkdir -p /myredis
cp /opt/software/redis-7.0.11/redis.conf /myredis/redis7.conf
如果一台机器要运行多个 Redis 实例,配置文件名建议按端口命名,例如 redis-6379.conf、redis-6380.conf,比 redis7.conf 更容易排查。
配置文件修改位置如下。先区分三类配置:网络配置决定谁能连进来,安全配置决定谁有权限操作,持久化配置决定异常宕机后能恢复多少数据。
# redis.conf 配置文件,改完后确保生效,记得重启,记得重启
# 1. 默认 daemonize no,改为:
daemonize yes
# 2. 默认 protected-mode yes,改为:
protected-mode no
# 3. 默认 bind 127.0.0.1,改为:
# 直接注释掉 bind 127.0.0.1
# 默认 bind 127.0.0.1 只能本机访问
# 或改成本机 IP 地址,否则影响远程 IP 连接
# 4. 添加 Redis 密码,改为:
requirepass 你自己设置的密码
7.1 学习环境配置示例
学习环境中常改的参数如下。这个示例只适合虚拟机、内网实验或本机学习,不要直接照搬到公网服务器。
bind 0.0.0.0
protected-mode no
port 6379
daemonize yes
requirepass 111111
dir /myredis
logfile "/myredis/redis7.log"
pidfile /var/run/redis_6379.pid
dbfilename dump6379.rdb
appendonly no
参数说明:
| 参数 | 说明 |
|---|---|
| bind | 监听地址。学习环境可用 0.0.0.0,生产环境优先绑定内网 IP 或 127.0.0.1,并配合安全组、防火墙和访问控制 |
| protected-mode | 保护模式。它主要用于防止误配置,不是完整安全机制,生产环境不能只靠这个参数保证安全 |
| port | Redis 服务端口,默认 6379 |
| daemonize | 是否后台运行 |
| requirepass | 客户端访问密码。Redis 6+ 更推荐使用 ACL 管理用户和权限 |
| dir | RDB、AOF 等文件的工作目录,多实例部署时必须为不同实例隔离目录 |
| logfile | 日志文件 |
| pidfile | pid 文件 |
| dbfilename | RDB 文件名 |
| appendonly | 是否开启 AOF 持久化。关闭 AOF 时,异常宕机可能丢失最近一次 RDB 快照之后的数据 |
7.2 安全配置必须单独检查
这里需要特别说明:如果 bind 0.0.0.0、protected-mode no、requirepass 又为空,就等于把 Redis 暴露在网络上,非常危险。默认情况下,一旦 Redis 监听到公网地址,又没有防火墙、密码或 ACL 保护,就可能被未授权访问。
生产环境至少要满足几条原则:
- Redis 不直接暴露公网,优先绑定内网地址。
- 安全组或防火墙只允许可信应用服务器访问。
- Redis 6+ 优先使用 ACL,而不是只依赖单个 requirepass。
- 密码或 ACL 凭据不要写进公开脚本、Git 仓库或命令历史。
- 多实例要隔离 dir、logfile、pidfile 和端口,避免文件互相覆盖。
requirepass 可以满足学习环境的基本认证,但生产环境更建议使用 ACL:
ACL SETUSER app_user on >强密码 ~app:* +@read +@write -@dangerous
这类配置可以限制用户只能访问指定 key 前缀和命令集合,比所有客户端共享一个密码更容易治理。
7.3 持久化配置要按数据重要性选择
示例里使用 appendonly no,是为了让入门安装流程更简单。但这意味着 Redis 只依赖 RDB 快照,异常宕机时可能丢失最近一次快照之后的数据。
如果 Redis 承载的是会话、验证码、临时缓存,这个风险可能可以接受;如果承载的是计数、状态、消息流或其它需要尽量保留的数据,就应该评估开启 AOF 或混合持久化。持久化策略不是固定答案,要结合数据可丢失程度、写入量、磁盘性能和恢复时间要求来定。
8. 启动、连接和验证
# 使用自定义配置文件启动 Redis 服务
[root@hadoop100 ~]# redis-server /myredis/redis7.conf
# 指定 Redis 地址、端口和密码连接 Redis
[root@hadoop100 ~]# redis-cli -h 127.0.0.1 -p 6379 --pass 111111
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# 测试 Redis 服务是否正常连接
127.0.0.1:6379> ping
PONG
# 退出 Redis 客户端
127.0.0.1:6379> quit
# 关闭指定端口的 Redis 服务
[root@hadoop100 ~]# redis-cli -h 127.0.0.1 -p 6379 --pass 111111 shutdown
这个 Warning 的意思是:密码出现在命令行参数里,可能被 shell history、ps 进程列表或审计系统看到。学习环境可以接受这种写法,生产环境应尽量改用交互输入、受保护的环境变量、专用客户端配置或应用侧密钥管理。
关闭 Redis 时也一样,生产环境不建议把密码明文写在命令行里。可以进入 redis-cli 后执行 AUTH 和 SHUTDOWN,或者通过受控运维脚本完成。多实例环境中一定要带端口,否则容易关错实例。
9. Redis 卸载
源码安装后,卸载思路比较直接:
- 先停止 Redis 服务
- 删除 /usr/local/bin 下 Redis 相关命令
- 删除自定义配置目录和数据目录
学习环境示例:
redis-cli -p 6379 --pass 111111 shutdown
rm -f /usr/local/bin/redis-*
rm -rf /myredis
生产环境不要直接 rm -rf 数据目录。应先确认实例、备份、持久化文件和服务托管方式,再按变更流程下线。
如果机器上跑了多个 Redis 实例,删除前先确认进程和端口:
ps -ef | grep redis
ss -lntp | grep 6379
10. 本文小结
本文先把 Redis 的定位讲清楚:它是内存型数据结构服务,不只是缓存。入门阶段重点掌握安装、启动、连接、验证、关闭和基础配置几个动作。
从实践角度,第一步要熟悉下面这些命令。下面仍然是学习环境写法,生产环境要避免把密码明文放在命令行里。
# 编译安装
make
make install
# 启动
redis-server /myredis/redis7.conf
# 连接
redis-cli -h 127.0.0.1 -p 6379 --pass 111111
# 验证
ping
# 关闭
redis-cli -h 127.0.0.1 -p 6379 --pass 111111 shutdown
后续文章会从 Redis 数据类型开始,按命令、场景和注意事项逐步展开。