Redis 系列 1. 入门、安装与基础配置


1. Redis 是什么

Redis 全称是 Remote Dictionary Server,可以理解为一个远程字典服务。

从工程使用角度看,Redis 是一个高性能的内存型 key-value 数据库。更准确地说,它是多数据结构内存存储系统:数据主要在内存中读写,同时支持通过 RDB、AOF 或混合方式持久化到磁盘。它不只是简单的字符串缓存,还提供了 String、List、Hash、Set、ZSet、Bitmap、HyperLogLog、GEO、Stream 等数据结构,并支持复制、哨兵、集群、事务、Lua 脚本、发布订阅等能力。

典型架构位置如下:Redis 常作为 MySQL 前置缓存层,用来承接高频读请求,减少数据库压力。

Redis 缓存位置

这时要注意一个边界: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 版本演进

学习 Redis 时建议按下面顺序走:

  1. 安装、启动、连接、关闭
  2. Key 通用命令和常用数据类型
  3. 持久化:RDB、AOF、混合持久化
  4. 事务、Pipeline、发布订阅
  5. 主从复制
  6. Sentinel 哨兵
  7. Cluster 集群
  8. 应用侧接入,例如 Spring Boot、Jedis、Lettuce、RedisTemplate
  9. 进阶能力: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 保护,就可能被未授权访问。

生产环境至少要满足几条原则:

  1. Redis 不直接暴露公网,优先绑定内网地址。
  2. 安全组或防火墙只允许可信应用服务器访问。
  3. Redis 6+ 优先使用 ACL,而不是只依赖单个 requirepass。
  4. 密码或 ACL 凭据不要写进公开脚本、Git 仓库或命令历史。
  5. 多实例要隔离 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 卸载

源码安装后,卸载思路比较直接:

  1. 先停止 Redis 服务
  2. 删除 /usr/local/bin 下 Redis 相关命令
  3. 删除自定义配置目录和数据目录

学习环境示例:

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 数据类型开始,按命令、场景和注意事项逐步展开。


文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
  目录