1. Redis简介与安装准备
Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,常被用作数据库、缓存和消息中间件。它支持多种数据结构,包括字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)等,并提供了丰富的操作命令。在Linux环境下安装Redis是大多数开发者和运维人员的必备技能。
1.1 为什么选择Redis 5.0.0版本
Redis 5.0.0是一个长期支持(LTS)版本,发布于2018年10月。这个版本引入了几个重要特性:
- 新的Stream数据类型,非常适合消息队列场景
- 改进了RDB持久化性能
- 增强了集群管理功能
- 更完善的模块系统
虽然现在有更新的版本可用,但5.0.0版本经过长期验证,稳定性极高,特别适合生产环境使用。这也是我选择这个版本进行演示的原因。
1.2 系统环境准备
在开始安装前,我们需要确保系统满足以下要求:
- CentOS 7或更高版本(本文以CentOS 7为例)
- GCC编译器(用于编译Redis源码)
- 基本的Linux操作权限(root或sudo权限)
首先检查系统是否安装了GCC:
gcc --version如果没有安装,可以通过以下命令安装开发工具集:
yum groupinstall "Development Tools"2. Redis安装详细步骤
2.1 下载Redis源码包
Redis官方提供了源码下载地址,我们可以直接获取5.0.0版本的压缩包:
wget https://download.redis.io/releases/redis-5.0.0.tar.gz提示:如果下载速度慢,可以考虑使用国内镜像源,如华为云镜像:
wget https://mirrors.huaweicloud.com/redis/redis-5.0.0.tar.gz
2.2 解压与编译安装
将下载的源码包解压到/usr/local目录:
tar xzf redis-5.0.0.tar.gz -C /usr/local cd /usr/local/redis-5.0.0编译Redis源码:
make编译过程可能需要几分钟时间,取决于服务器性能。
注意:如果编译过程中出现错误,通常是缺少依赖库导致的。常见错误及解决方法:
- 缺少jemalloc:执行
make MALLOC=libc强制使用libc内存分配器- 缺少systemd-devel:
yum install systemd-devel
安装Redis到系统目录:
cd src && make install这会将Redis的可执行文件安装到/usr/local/bin目录下。
2.3 文件组织与管理
为了便于管理,我们可以创建专门的目录结构:
mkdir -p /usr/local/redis/{bin,etc,logs,data}将关键文件移动到指定位置:
# 移动配置文件 mv /usr/local/redis-5.0.0/redis.conf /usr/local/redis/etc/ # 移动可执行文件 mv /usr/local/redis-5.0.0/src/{redis-server,redis-cli,redis-benchmark,redis-check-aof,redis-check-rdb} /usr/local/redis/bin/3. Redis配置与优化
3.1 基础配置调整
编辑配置文件/usr/local/redis/etc/redis.conf,修改以下关键参数:
daemonize yes # 以守护进程方式运行 bind 0.0.0.0 # 允许所有IP访问 protected-mode no # 关闭保护模式 requirepass yourpassword # 设置访问密码 dir /usr/local/redis/data # 数据存储目录 logfile "/usr/local/redis/logs/redis.log" # 日志文件路径3.2 内存与持久化配置
根据服务器内存情况调整内存相关参数:
maxmemory 2gb # 最大使用内存 maxmemory-policy allkeys-lru # 内存满时的淘汰策略持久化配置(根据需求选择RDB或AOF):
# RDB配置 save 900 1 # 900秒内至少有1个key变化时保存 save 300 10 # 300秒内至少有10个key变化时保存 save 60 10000 # 60秒内至少有10000个key变化时保存 # AOF配置 appendonly yes appendfsync everysec # 每秒同步一次3.3 系统参数优化
为了获得最佳性能,还需要调整一些系统参数:
- 修改Linux内核参数:
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf sysctl -p- 禁用透明大页(THP):
echo never > /sys/kernel/mm/transparent_hugepage/enabled- 调整文件描述符限制:
ulimit -n 65535 echo "* soft nofile 65535" >> /etc/security/limits.conf echo "* hard nofile 65535" >> /etc/security/limits.conf4. Redis服务管理
4.1 启动与停止Redis
启动Redis服务:
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf停止Redis服务:
/usr/local/redis/bin/redis-cli -a yourpassword shutdown4.2 设置开机自启
创建systemd服务文件/etc/systemd/system/redis.service:
[Unit] Description=Redis In-Memory Data Store After=network.target [Service] User=redis Group=redis ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf ExecStop=/usr/local/redis/bin/redis-cli shutdown Restart=always [Install] WantedBy=multi-user.target然后执行:
systemctl daemon-reload systemctl enable redis systemctl start redis4.3 防火墙配置
如果使用firewalld,需要开放Redis端口(默认6379):
firewall-cmd --permanent --add-port=6379/tcp firewall-cmd --reload对于云服务器,还需要在安全组规则中开放相应端口。
5. Redis测试与监控
5.1 基本功能测试
使用redis-cli连接服务器:
/usr/local/redis/bin/redis-cli -a yourpassword执行基本命令测试:
127.0.0.1:6379> set test "Hello Redis" OK 127.0.0.1:6379> get test "Hello Redis"5.2 性能测试
使用redis-benchmark工具进行性能测试:
/usr/local/redis/bin/redis-benchmark -h 127.0.0.1 -p 6379 -a yourpassword -c 50 -n 1000005.3 监控Redis运行状态
查看Redis信息:
/usr/local/redis/bin/redis-cli -a yourpassword info监控关键指标:
watch -n 1 "/usr/local/redis/bin/redis-cli -a yourpassword info | grep -e 'connected_clients' -e 'used_memory_human' -e 'instantaneous_ops_per_sec'"6. 常见问题与解决方案
6.1 连接问题排查
问题:无法远程连接Redis
解决方案:
- 检查
bind配置是否为0.0.0.0 - 确认
protected-mode设置为no - 检查防火墙和安全组规则
- 确认密码是否正确
6.2 内存问题处理
问题:Redis占用内存过高
解决方案:
- 检查是否有大key:
redis-cli --bigkeys - 设置合理的
maxmemory和淘汰策略 - 考虑使用Redis集群分散内存压力
6.3 持久化问题
问题:AOF文件过大
解决方案:
- 执行AOF重写:
BGREWRITEAOF - 调整AOF重写配置:
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb7. 生产环境建议
在实际生产环境中部署Redis时,还需要考虑以下方面:
高可用方案:
- 主从复制配置
- Redis Sentinel实现自动故障转移
- Redis Cluster分片方案
备份策略:
- 定期RDB快照备份
- AOF日志备份
- 跨机房备份
安全加固:
- 使用强密码
- 限制危险命令(如FLUSHALL)
- 启用TLS加密传输
性能调优:
- 根据工作负载调整TCP内核参数
- 优化持久化配置
- 监控慢查询
我在实际运维中发现,Redis的性能很大程度上取决于内存分配策略和持久化配置。对于写密集型的应用,建议使用AOF持久化并适当调整appendfsync参数;而对于读密集型应用,可以优先考虑RDB快照方式。