Redis在Linux自启动配置
方法一:传统init.d脚本(适用于CentOS 6等旧系统)
1. 修改Redis配置文件
编辑redis.conf文件,将daemonize设置为yes:
1 2 3 4 5
| vim /usr/local/redis/redis.conf
daemonize yes
|
2. 创建init.d脚本
创建/etc/init.d/redis文件:
添加以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
PATH=/usr/local/bin:/sbin:/usr/bin:/bin REDISPORT=6379 EXEC=/usr/local/redis/src/redis-server REDIS_CLI=/usr/local/redis/src/redis-cli PIDFILE=/var/run/redis.pid CONF="/usr/local/redis/redis.conf" case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed." else echo "Starting Redis server..." $EXEC $CONF fi if [ "$?"="0" ] then echo "Redis is running..." fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE exists, process is not running." else PID=$(cat $PIDFILE) echo "Stopping..." $REDIS_CLI -p $REDISPORT SHUTDOWN while [ -x $PIDFILE ] do echo "Waiting for Redis to shutdown..." sleep 1 done echo "Redis stopped" fi ;; restart|force-reload) ${0} stop ${0} start ;; *) echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2 exit 1 esac
|
3. 设置执行权限
1
| chmod +x /etc/init.d/redis
|
4. 配置开机自启动
1 2 3 4 5 6
| service redis start service redis stop
chkconfig redis on
|
方法二:systemd服务(适用于CentOS 7+、Ubuntu 16.04+等现代系统)
1. 创建systemd服务文件
创建/etc/systemd/system/redis.service文件:
1
| vim /etc/systemd/system/redis.service
|
添加以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13
| [Unit] Description=Redis In-Memory Data Store After=network.target
[Service] User=redis Group=redis ExecStart=/usr/local/redis/src/redis-server /usr/local/redis/redis.conf ExecStop=/usr/local/redis/src/redis-cli shutdown Restart=always
[Install] WantedBy=multi-user.target
|
2. 重载systemd配置
3. 启动Redis服务
1 2 3 4 5 6 7 8
| systemctl start redis
systemctl enable redis
systemctl status redis
|
Redis配置优化
基本配置
| 配置项 |
说明 |
建议值 |
| daemonize |
是否以守护进程运行 |
yes |
| pidfile |
PID文件路径 |
/var/run/redis.pid |
| port |
监听端口 |
6379 |
| bind |
绑定地址 |
127.0.0.1(生产环境建议指定具体IP) |
| timeout |
客户端超时时间 |
300 |
| loglevel |
日志级别 |
notice |
| logfile |
日志文件路径 |
/var/log/redis/redis.log |
| databases |
数据库数量 |
16 |
持久化配置
| 配置项 |
说明 |
建议值 |
| save |
RDB持久化触发条件 |
save 900 1 save 300 10 save 60 10000 |
| rdbcompression |
RDB压缩 |
yes |
| dbfilename |
RDB文件名 |
dump.rdb |
| dir |
数据文件目录 |
/var/lib/redis |
| appendonly |
AOF持久化 |
yes |
| appendfilename |
AOF文件名 |
appendonly.aof |
| appendfsync |
AOF同步策略 |
everysec |
内存配置
| 配置项 |
说明 |
建议值 |
| maxmemory |
最大内存限制 |
根据服务器内存设置,如4GB服务器设置为3GB |
| maxmemory-policy |
内存淘汰策略 |
allkeys-lru |
| maxmemory-samples |
LRU采样数量 |
5 |
安全配置
| 配置项 |
说明 |
建议值 |
| requirepass |
连接密码 |
复杂密码 |
| rename-command |
重命名危险命令 |
rename-command FLUSHALL “” |
| rename-command FLUSHDB “” |
|
|
| rename-command CONFIG “” |
|
|
| protected-mode |
保护模式 |
yes |
Redis常用命令
服务管理
1 2 3 4 5 6 7 8 9 10 11
| redis-server /path/to/redis.conf
redis-cli shutdown
redis-server --version
redis-cli ping
|
数据操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| redis-cli
keys *
set key value
get key
del key
expire key seconds
ttl key
dbsize
flushdb
flushall
|
集群操作
1 2 3 4 5 6 7 8
| info replication
slaveof master_ip master_port
slaveof no one
|
Redis监控
使用redis-cli监控
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| redis-cli info
redis-cli info memory
redis-cli info cpu
redis-cli info clients
redis-cli info commandstats
|
使用redis-benchmark测试性能
1 2 3 4 5
| redis-benchmark -n 100000 -c 50
redis-benchmark -n 100000 -c 50 -t set,get
|
使用监控工具
- RedisExporter + Prometheus + Grafana:实现Redis监控可视化
- redis-stat:轻量级Redis监控工具
- RedisGears:Redis的可编程数据处理引擎
Redis安全最佳实践
- 设置强密码:使用复杂的密码保护Redis
- 限制网络访问:通过bind参数限制只接受特定IP的连接
- 关闭危险命令:重命名或禁用FLUSHALL、FLUSHDB等危险命令
- 使用非root用户运行:创建专门的redis用户
- 启用AOF持久化:确保数据安全
- 定期备份:定期备份RDB和AOF文件
- 更新Redis版本:及时更新到最新稳定版本
- 使用SSL:在生产环境中使用SSL加密连接
常见问题解决
1. Redis启动失败
问题:Redis无法启动,提示端口被占用
解决方案:
- 检查端口是否被占用:
netstat -tlnp | grep 6379
- 停止占用端口的进程:
kill -9 <pid>
- 重新启动Redis
2. 内存使用过高
问题:Redis内存使用超过限制
解决方案:
- 调整maxmemory设置
- 优化内存淘汰策略
- 检查是否有大键占用内存:
redis-cli --bigkeys
3. 持久化文件过大
问题:RDB或AOF文件过大
解决方案:
- 优化数据结构
- 定期清理过期数据
- 考虑使用Redis集群分片
4. 主从复制故障
问题:主从复制断开
解决方案:
- 检查网络连接
- 检查主服务器状态
- 重新配置从服务器:
slaveof master_ip master_port
参考资料