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
vim /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
# chkconfig: 2345 10 90
# description: Start and Stop redis

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
# 尝试启动或停止redis
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配置

1
systemctl daemon-reload

3. 启动Redis服务

1
2
3
4
5
6
7
8
# 启动Redis
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
redis-server /path/to/redis.conf

# 停止Redis
redis-cli shutdown

# 查看Redis版本
redis-server --version

# 查看Redis运行状态
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
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信息
redis-cli info

# 查看内存使用情况
redis-cli info memory

# 查看CPU使用情况
redis-cli info cpu

# 查看客户端连接
redis-cli info clients

# 查看命令统计
redis-cli info commandstats

使用redis-benchmark测试性能

1
2
3
4
5
# 测试100000个请求,50个并发
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安全最佳实践

  1. 设置强密码:使用复杂的密码保护Redis
  2. 限制网络访问:通过bind参数限制只接受特定IP的连接
  3. 关闭危险命令:重命名或禁用FLUSHALL、FLUSHDB等危险命令
  4. 使用非root用户运行:创建专门的redis用户
  5. 启用AOF持久化:确保数据安全
  6. 定期备份:定期备份RDB和AOF文件
  7. 更新Redis版本:及时更新到最新稳定版本
  8. 使用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

参考资料