Redis 6.x 基础安装
大约 14 分钟约 4070 字
Redis 6.x 基础安装
1.1、下载Redis6.x的安装包
wget https://download.redis.io/releases/redis-6.2.6.tar.gz下载地址参考
# Redis 6.2 系列(稳定版)
wget https://download.redis.io/releases/redis-6.2.14.tar.gz
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
# Redis 7.0 系列(最新版)
wget https://download.redis.io/releases/redis-7.0.15.tar.gz
wget https://download.redis.io/releases/redis-7.2.4.tar.gz
# 使用 curl 下载(支持断点续传)
curl -C - -O https://download.redis.io/releases/redis-6.2.6.tar.gz
# 国内镜像下载(加速)
wget https://mirrors.huaweicloud.com/redis/redis-6.2.6.tar.gz
# 验证下载文件完整性
md5sum redis-6.2.6.tar.gz
sha256sum redis-6.2.6.tar.gz1.2、安装Redis6的依赖环境
Redis6 跟之前有些不同,先要升级gcc的版本,输入以下命令
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile依赖环境安装详解
# ====== CentOS 7 安装依赖 ======
# 安装 GCC 工具链(Redis 6.x 需要 GCC 5.3+)
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
# 激活新版 GCC
source /opt/rh/devtoolset-9/enable
# 永久生效
echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile
source /etc/profile
# 验证 GCC 版本
gcc --version
# 应该显示 gcc 9.x
# 安装其他必要依赖
yum -y install make wget openssl-devel tcl jemalloc-devel
# ====== CentOS 8 / RHEL 8 安装依赖 ======
dnf -y install gcc gcc-c++ make wget openssl-devel tcl jemalloc-devel
# ====== Ubuntu / Debian 安装依赖 ======
apt update
apt install -y build-essential wget libssl-dev tcl libjemalloc-dev
# ====== 编译选项说明 ======
# --prefix: 指定安装目录
# --with-jemalloc: 使用 jemalloc 内存分配器(性能更好)
# MALLOC=libc: 使用 libc 默认分配器
# BUILD_TLS=yes: 编译 TLS 支持
# USE_SYSTEMD=yes: 编译 systemd 支持1.3、安装Redis
1.3.1 解压
tar -zxvf redis-6.2.6.tar.gz1.3.2 进入解压目录进行编译和安装
cd redis-6.2.6
make 编译源码
#########################
make && make install (安装到默认目录)
#########################
make PREFIX=/usr/local/redis6 install 安装到指定目录编译安装详解
# ====== 解压源码 ======
tar -zxvf redis-6.2.6.tar.gz
cd redis-6.2.6
# ====== 编译 ======
# 基本编译
make
# 指定参数编译
make MALLOC=jemalloc # 使用 jemalloc
make BUILD_TLS=yes # 编译 TLS 支持
make USE_SYSTEMD=yes # 编译 systemd 支持
# 多核加速编译
make -j$(nproc)
# 编译测试(耗时较长)
make test
# ====== 安装 ======
# 安装到默认目录 /usr/local/bin
make install
# 安装到指定目录
make PREFIX=/usr/local/redis6 install
# 验证安装
/usr/local/redis6/bin/redis-server --version
/usr/local/redis6/bin/redis-cli --version
# ====== 可选:安装 Redis 工具 ======
# Redis 安装后会生成以下可执行文件:
# redis-server - Redis 服务端
# redis-cli - Redis 命令行客户端
# redis-benchmark - Redis 性能测试工具
# redis-check-aof - AOF 文件检查工具
# redis-check-rdb - RDB 文件检查工具
# redis-sentinel - Redis 哨兵
# 创建软链接(方便使用)
ln -sf /usr/local/redis6/bin/redis-server /usr/local/bin/redis-server
ln -sf /usr/local/redis6/bin/redis-cli /usr/local/bin/redis-cli
ln -sf /usr/local/redis6/bin/redis-benchmark /usr/local/bin/redis-benchmark1.4、启动Redis
1.4.1 复制redis.conf文件到安装目录
##在解压目录内执行
cp redis.conf /usr/local/redis61.4.2 修改redis.conf配置文件
##进入文件夹
cd /usr/local/redis6
## 编辑redis.conf
vi redis.conf
#将里面的daemonize no 改成yes,以后台进程方式启动redis
#修改daemonize为yes,即默认以后台程序方式运行(还记得前面手动使用&号强制后台运行吗)。
daemonize yes
--------------设置外网访问-----------------------------
#bind 127.0.0.1前面加上# 注释掉这一行,127.0.0.1限制只能本机访问
#将protected-mode yes改为no
bind 0.0.0.0
#给redis设置密码,尽可能的复杂写,不要出现root 123 等简单的密码
protected-mode yes
requirepass ****** ##,密码自己设置提示
如果上述参数不好找到,请使用vim 编辑文件,使用查找命令
如:/requirepass foobared
生产级 redis.conf 配置详解
# ====== 网络配置 ======
bind 0.0.0.0 # 监听所有网卡(生产环境建议绑定具体 IP)
protected-mode yes # 开启保护模式
port 6379 # 监听端口
tcp-backlog 511 # TCP 连接队列
timeout 300 # 客户端空闲超时(秒)
tcp-keepalive 60 # TCP keepalive
# ====== 通用配置 ======
daemonize yes # 后台运行
pidfile /var/run/redis_6379.pid # PID 文件位置
loglevel notice # 日志级别
logfile /var/log/redis/redis.log # 日志文件路径
databases 16 # 数据库数量
# ====== 内存配置 ======
maxmemory 4gb # 最大内存限制(建议不超过物理内存的 70%)
maxmemory-policy allkeys-lru # 内存淘汰策略
# volatile-lru: 从设置了过期时间的 key 中淘汰最近最少使用的
# allkeys-lru: 从所有 key 中淘汰最近最少使用的
# volatile-lfu: 从设置了过期时间的 key 中淘汰使用频率最低的
# allkeys-lfu: 从所有 key 中淘汰使用频率最低的
# volatile-ttl: 从设置了过期时间的 key 中淘汰 TTL 最短的
# noeviction: 不淘汰,写入操作返回错误(默认)
# ====== 持久化配置 ======
save 900 1 # 900 秒内 1 次修改触发 RDB
save 300 10 # 300 秒内 10 次修改触发 RDB
save 60 10000 # 60 秒内 10000 次修改触发 RDB
rdbcompression yes # RDB 压缩
rdbchecksum yes # RDB 校验
dbfilename dump.rdb # RDB 文件名
dir /data/redis # 数据目录
# AOF 配置
appendonly yes # 开启 AOF
appendfilename "appendonly.aof" # AOF 文件名
appendfsync everysec # AOF 同步策略
auto-aof-rewrite-percentage 100 # AOF 重写触发比例
auto-aof-rewrite-min-size 64mb # AOF 重写最小大小
aof-use-rdb-preamble yes # 开启混合持久化
# ====== 安全配置 ======
requirepass YourStrongPass2024! # 设置密码(生产环境必须)
# ====== 慢查询配置 ======
slowlog-log-slower-than 10000 # 超过 10ms 记录慢查询
slowlog-max-len 128 # 慢查询日志最大长度
# ====== 客户端配置 ======
maxclients 10000 # 最大客户端连接数1.4.3 基于配置文件启动Redis
cd /usr/local/redis6/bin
redis-server ../redis.conf启动与停止详解
# ====== 启动方式 ======
# 方式 1:基于配置文件启动(推荐)
redis-server /usr/local/redis6/redis.conf
# 方式 2:指定参数启动
redis-server --port 6379 --daemonize yes --requirepass "password"
# 方式 3:启动时覆盖配置
redis-server /usr/local/redis6/redis.conf --port 6380
# ====== 连接 Redis ======
# 本地连接
redis-cli
# 指定主机和端口
redis-cli -h 127.0.0.1 -p 6379
# 带密码连接
redis-cli -h 127.0.0.1 -p 6379 -a "password"
# 连接后验证
redis-cli -a "password" ping
# 应返回 PONG
# ====== 安全停止 Redis ======
# 方法 1:使用 redis-cli shutdown(推荐)
redis-cli -a "password" shutdown
# 方法 2:使用 redis-cli 停止指定端口
redis-cli -p 6379 -a "password" shutdown nosave
# 方法 3:使用 kill(不推荐,可能导致数据损坏)
# kill $(cat /var/run/redis_6379.pid)
# ====== 验证 Redis 运行状态 ======
redis-cli -a "password" INFO server
redis-cli -a "password" INFO memory
redis-cli -a "password" INFO clients
redis-cli -a "password" INFO persistence
redis-cli -a "password" INFO stats
# 查看端口监听
ss -tlnp | grep 63791.4.4 防火墙放行Redis的端口6379
#查看防火墙目前的放行端口列表
firewall-cmd --list-ports
#添加防火墙放行端口(permanent代表永久生效)
firewall-cmd --add-port=6379/tcp --permanent
#重新加载防火墙(添加完放行端口一定要重新加载防火墙)
firewall-cmd --reload防火墙配置详解
# ====== 基本防火墙配置 ======
firewall-cmd --add-port=6379/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports
# ====== 限制来源 IP(推荐) ======
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="6379" accept'
firewall-cmd --reload
# ====== SELinux 配置 ======
# 如果 SELinux 阻止 Redis 运行
setenforce 0 # 临时关闭
# 永久关闭(需要重启)
vi /etc/selinux/config
# SELINUX=disabled
# 或配置 SELinux 策略允许 Redis
semanage port -a -t redis_port_t -p tcp 63791.4.5 测试是否支持远程
提示
自行使用相关工具
远程连接测试
# ====== 使用 redis-cli 测试 ======
# 从远程服务器连接
redis-cli -h 192.168.1.10 -p 6379 -a "password"
redis-cli -h 192.168.1.10 -p 6379 -a "password" ping
# 测试写入和读取
redis-cli -h 192.168.1.10 -p 6379 -a "password" SET test_key "hello"
redis-cli -h 192.168.1.10 -p 6379 -a "password" GET test_key
# ====== 使用 telnet/nc 测试端口连通性 ======
nc -zv 192.168.1.10 6379
telnet 192.168.1.10 6379
# ====== 使用性能测试 ======
redis-benchmark -h 192.168.1.10 -p 6379 -a "password" -c 50 -n 10000
# -c: 并发连接数
# -n: 请求总数1.4.6 Redis的关闭
## 通用kill
lsof -i:6379 #根据端口查找相关pid
kill -9 16931 #16931为对应的pid,请参照修改Redis 关闭详解
# ====== 推荐方式:使用 SHUTDOWN 命令 ======
# 正常关闭(会触发 RDB/AOF 持久化)
redis-cli -a "password" SHUTDOWN
# 不保存数据直接关闭
redis-cli -a "password" SHUTDOWN NOSAVE
# 异步关闭(不等待客户端断开)
redis-cli -a "password" SHUTDOWN NOSAVE
# ====== 查找并关闭 ======
# 查找 Redis 进程
ps -ef | grep redis-server
lsof -i:6379
# 如果必须使用 kill(不推荐)
kill -15 $(cat /var/run/redis_6379.pid) # SIGTERM,安全关闭
# 千万不要使用 kill -9,会导致数据损坏1.4.7 Redis开机启动
## 在/etc目录下新建redis目录
cd /etc/
mkdir redis
# 将redis.conf文件复制到/etc/redis目录下,并重命名为6379.conf
cp /usr/local/redis6/redis.conf /etc/redis/6379.conf
#复制启动脚本 (启动脚本在当初解压的安装位置)
cp /root/redis-6.2.6/utils/redis_init_script /etc/init.d/redis
vi /etc/init.d/redis
## REDISPORT=6379
## EXEC=/usr/local/redis6/bin/redis-server #修改EXEC为你自己的路径
## CLIEXEC=/usr/local/redis6/bin/redis-cli #修改CLIEXEC为你自己的路径
## 执行自启命令
cd /etc/init.d/
chkconfig redis on提示
如果运行结果提示:service redisd does not support chkconfig,
解决方法: 使用vim编辑redisd文件,在第一行加入如下两行注释,保存退出,再次执行自启命令即可
# chkconfig: 2345 90 10
# description: Redis is a persistent key-value database
注释的意思是,redis服务必须在运行级2,3,4,5下被启动或关闭,启动的优先级是90,关闭的优先级是10。
Systemd 服务配置(推荐方式)
# ====== 创建 systemd 服务文件 ======
cat > /etc/systemd/system/redis.service << 'EOF'
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
Type=forking
User=redis
Group=redis
PIDFile=/var/run/redis_6379.pid
ExecStart=/usr/local/redis6/bin/redis-server /etc/redis/6379.conf
ExecStop=/usr/local/redis6/bin/redis-cli -a "password" shutdown
Restart=always
RestartSec=5
LimitNOFILE=65535
TimeoutStartSec=30
TimeoutStopSec=30
# 安全加固
PrivateTmp=yes
ProtectSystem=full
ReadWritePaths=/data/redis /var/log/redis
[Install]
WantedBy=multi-user.target
EOF
# ====== 创建 Redis 用户 ======
useradd -r -s /sbin/nologin redis
# ====== 创建必要目录 ======
mkdir -p /data/redis
mkdir -p /var/log/redis
mkdir -p /var/run/redis
chown -R redis:redis /data/redis
chown -R redis:redis /var/log/redis
chown -R redis:redis /var/run/redis
# ====== 设置目录权限 ======
chmod 750 /data/redis
chmod 750 /var/log/redis
# ====== 启用并启动 Redis ======
systemctl daemon-reload
systemctl enable redis
systemctl start redis
systemctl status redis
# ====== 服务管理命令 ======
systemctl start redis # 启动
systemctl stop redis # 停止
systemctl restart redis # 重启
systemctl status redis # 状态
systemctl reload redis # 重新加载配置
# 查看日志
journalctl -u redis -f
journalctl -u redis --since "1 hour ago"1.4.8 启动Redis
# 打开redis命令:
service redis start
# 关闭redis命令:
service redis stop运行如果出错
service redis start 运行如果出错
错误信息/var/run/redis_6379.pid exists, process is already running or crashed
请删除/var/run/redis_6379.pid文件
停止出错
service redis stop
停止服务是报错 NOAUTH Authentication required
编辑/etc/init.d/redis
vim /etc/init.d/redis
增加密码参数
REDISPORT=6379
EXEC=/usr/local/redis6/bin/redis-server
REDIS_CLI=/usr/local/redis6/bin/redis-cli
PIDFILE=/var/run/redis.pid
CONF="/usr/local/redis/etc/redis.conf"
RedisPwd=newpassword ##增加密码
case "$1" in
start)
if [ -f "$PIDFILE" ]; then
echo "$PIDFILE exists, process is already running or crashed"
else
echo -n "Starting Redis server..."
$EXEC $CONF
if [ "$?"="0" ]; then
echo " done"
else
echo " failed"
fi
fi
;;
stop)
if [ ! -f "$PIDFILE" ]; then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping Redis server..."
$REDIS_CLI -a $RedisPwd -p $REDISPORT shutdown ##增加密码参数
if [ "$?"="0" ]; then
echo " done"
else
echo " failed"
fi
fi
;;
restart)
${0} stop
${0} start
;;
kill)
echo "force kill redis server..."
killall redis-server
if [ "$?"="0" ]; then
echo " done"
else
echo " failed"
fi
;;
status)
if [ -f "$PIDFILE" ]; then
echo "Redis server is running."
else
echo "Redis server is stopped."
fi
;;
*)
echo "Usage: /etc/init.d/redis {start|stop|restart|status|kill}" >&2
exit 1
esac常用运维操作
# ====== 数据库操作 ======
# 切换数据库
redis-cli -a "password" -n 0 # 默认使用数据库 0
redis-cli -a "password" -n 1 # 使用数据库 1
# ====== Key 管理 ======
# 查看所有 Key
redis-cli -a "password" KEYS '*'
redis-cli -a "password" KEYS 'user:*'
redis-cli -a "password" SCAN 0 MATCH 'user:*' COUNT 100
# 查看 Key 的类型
redis-cli -a "password" TYPE mykey
# 查看 Key 的过期时间
redis-cli -a "password" TTL mykey # 剩余秒数
redis-cli -a "password" PTTL mykey # 剩余毫秒数
# 设置过期时间
redis-cli -a "password" EXPIRE mykey 3600 # 3600 秒后过期
redis-cli -a "password" EXPIREAT mykey 1700000000 # 指定时间戳过期
redis-cli -a "password" PEXPIRE mykey 3600000 # 毫秒级过期
# 删除 Key
redis-cli -a "password" DEL key1 key2 key3
# 查看数据库信息
redis-cli -a "password" DBSIZE
redis-cli -a "password" INFO keyspace
# ====== 内存管理 ======
redis-cli -a "password" INFO memory
redis-cli -a "password" MEMORY USAGE mykey # 查看 Key 占用内存
redis-cli -a "password" MEMORY DOCTOR # 内存诊断报告
# ====== 性能测试 ======
# 基准测试
redis-benchmark -h 127.0.0.1 -p 6379 -a "password" -c 50 -n 100000
# 测试 SET 操作
redis-benchmark -h 127.0.0.1 -p 6379 -a "password" -t set,get -c 50 -n 100000
# 使用 Pipeline 批量操作
redis-cli -a "password" --pipe < commands.txt
# ====== 监控命令 ======
# 实时监控所有命令
redis-cli -a "password" MONITOR
# 查看 Redis 信息
redis-cli -a "password" INFO
redis-cli -a "password" INFO server
redis-cli -a "password" INFO memory
redis-cli -a "password" INFO replication
redis-cli -a "password" INFO clients
redis-cli -a "password" INFO stats
# 查看慢查询
redis-cli -a "password" SLOWLOG GET 10
redis-cli -a "password" SLOWLOG LEN
# 查看客户端列表
redis-cli -a "password" CLIENT LIST
# 查看 Redis 状态
redis-cli -a "password" PING数据备份与恢复
# ====== RDB 备份与恢复 ======
# 触发 RDB 快照
redis-cli -a "password" BGSAVE
# 查看 RDB 文件
ls -la /data/redis/dump.rdb
# 复制备份文件
cp /data/redis/dump.rdb /backup/redis/dump_$(date +%Y%m%d).rdb
# 恢复:停止 Redis,替换 RDB 文件,启动 Redis
redis-cli -a "password" SHUTDOWN NOSAVE
cp /backup/redis/dump_20240101.rdb /data/redis/dump.rdb
chown redis:redis /data/redis/dump.rdb
redis-server /etc/redis/6379.conf
# ====== AOF 备份与恢复 ======
# 复制 AOF 文件
cp /data/redis/appendonly.aof /backup/redis/appendonly_$(date +%Y%m%d).aof
# 修复损坏的 AOF 文件
redis-check-aof --fix /data/redis/appendonly.aof
# ====== 自动备份脚本 ======
#!/bin/bash
# redis_backup.sh
set -euo pipefail
REDIS_CLI="redis-cli -a password"
BACKUP_DIR="/backup/redis"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
# 触发 BGSAVE
$REDIS_CLI BGSAVE
sleep 5
# 备份 RDB 文件
cp /data/redis/dump.rdb "${BACKUP_DIR}/dump_${DATE}.rdb"
gzip "${BACKUP_DIR}/dump_${DATE}.rdb"
# 清理过期备份
find "$BACKUP_DIR" -name "*.rdb.gz" -mtime +7 -delete
echo "Backup completed: dump_${DATE}.rdb.gz"关键知识点
- 部署类主题的核心不是"装成功",而是"稳定运行、可排障、可回滚"。
- 同一个服务通常至少要关注版本、目录、端口、权限、数据、日志和备份。
- Linux 问题经常跨越系统层、网络层、服务层和应用层。
- 缓存与开关类主题都在处理"配置/数据与运行时行为之间的解耦"。
- Redis 6.x 编译需要 GCC 5.3+,CentOS 7 需要安装 devtoolset。
- 生产环境必须设置 requirepass 密码。
- kill -9 关闭 Redis 会导致数据损坏,务必使用 SHUTDOWN 命令。
- 推荐使用 systemd 管理 Redis 服务,而非 init.d 脚本。
项目落地视角
- 把安装步骤补成可重复执行的清单,必要时写成脚本或配置文件。
- 把配置目录、数据目录、日志目录和挂载点明确拆开。
- 上线前检查防火墙、SELinux、时区、磁盘、系统服务和健康检查。
- 明确 Key 设计、过期策略、回源逻辑和降级方案。
- 建立定期备份和恢复演练机制。
常见误区
- 使用 latest 或未固定版本,导致环境不可复现。
- 只验证启动成功,不验证持久化、开机自启和故障恢复。
- 遇到问题先改配置而不是先看日志和依赖链路。
- 只加缓存,不设计失效与一致性策略。
- 使用 kill -9 关闭 Redis。
- bind 设置为 0.0.0.0 但不设置密码。
- 不设置 maxmemory 导致 Redis 占用所有内存。
- 忽略持久化配置导致重启后数据丢失。
进阶路线
- 继续补齐 systemd、性能监控、安全加固和备份恢复。
- 把单机操作升级成 Docker、Kubernetes 或 IaC 方案。
- 建立标准化运维手册,包括巡检、扩容、回滚和灾备演练。
- 继续补齐多级缓存、缓存预热、分布式缓存治理和旗标管理平台。
- 学习 Redis Cluster 和 Redis Sentinel 高可用方案。
适用场景
- 当你准备把《Redis 6.x 基础安装》真正落到项目里时,最适合先在一个独立模块或最小样例里验证关键路径。
- 适合单机环境初始化、中间件快速搭建、测试环境验证和生产部署前准备。
- 当服务稳定性依赖端口、权限、目录、网络和系统参数时,这类主题会直接影响成败。
落地建议
- 固定版本号与镜像标签,避免"latest"带来的不可预期变化。
- 把配置、数据、日志目录拆开管理,并记录恢复步骤。
- 上线前确认端口、防火墙、SELinux、时区和磁盘空间。
- 使用 systemd 管理 Redis 服务。
- 配置合理的 maxmemory 和内存淘汰策略。
- 禁用危险命令(FLUSHALL、CONFIG 等)。
排错清单
- 先查 systemctl、容器日志和应用日志,确认失败发生在哪一层。
- 检查端口占用、目录权限、挂载路径和网络连通性。
- 如果是新环境问题,优先对比与已知正常环境的差异。
- 使用 redis-cli PING 验证服务是否正常。
- 检查 Redis 日志文件。
- 检查 GCC 版本是否满足编译要求。
复盘问题
- 如果把《Redis 6.x 基础安装》放进你的当前项目,最先要验证的输入、输出和失败路径分别是什么?
- 《Redis 6.x 基础安装》最容易在什么规模、什么边界条件下暴露问题?你会用什么指标或日志去确认?
- 相比默认实现或替代方案,采用《Redis 6.x 基础安装》最大的收益和代价分别是什么?
