在Ubuntu服务器上配置Redis - 从安装到远程连接
本文记录了在Ubuntu 22.04服务器上配置Redis的完整过程,包括安装、配置、服务设置以及远程连接测试。
1. 创建目录结构
首先创建一个专门的目录来管理Redis:
mkdir -p /root/redis
cd /root/redis
mkdir -p conf data logs
2. 安装Redis
更新包列表并安装Redis:
sudo apt update
sudo apt install redis-server
3. 配置Redis
创建并编辑Redis配置文件 /root/redis/conf/redis.conf
:
# 基本配置
bind 0.0.0.0
port 6379
daemonize no
dir /root/redis/data
logfile /root/redis/logs/redis.log
# 数据持久化配置
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfilename "appendonly.aof"
# 内存配置
maxmemory 256mb
maxmemory-policy allkeys-lru
# 安全配置
requirepass your_password
主要配置说明:
bind 0.0.0.0
: 允许远程连接daemonize no
: 让systemd管理进程- 配置了RDB和AOF两种持久化方式
- 设置了内存限制和清理策略
4. 配置系统服务
创建systemd服务文件 /etc/systemd/system/redis.service
:
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
Type=simple
Environment=statedir=/root/redis
User=root
Group=root
ExecStart=/usr/bin/redis-server /root/redis/conf/redis.conf
Restart=always
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
5. 设置权限
确保目录和文件权限正确:
chmod 755 /root/redis
chmod 755 /root/redis/conf
chmod 755 /root/redis/data
chmod 755 /root/redis/logs
chmod 644 /root/redis/conf/redis.conf
6. 启动Redis服务
# 重新加载systemd配置
sudo systemctl daemon-reload
# 启动Redis
sudo systemctl start redis
# 设置开机自启
sudo systemctl enable redis
# 检查状态
sudo systemctl status redis
7. 开放防火墙端口
如果使用UFW防火墙:
sudo ufw allow 6379/tcp
8. 云服务器安全组配置
如果使用云服务器(如阿里云、腾讯云等),需要在云服务器控制台配置安全组:
- 协议类型:TCP
- 端口范围:6379
- 来源:根据需求配置(如允许所有IP则设为0.0.0.0/0)
9. 测试连接
本地测试:
redis-cli
auth your_password
ping
远程测试:
redis-cli -h server_ip -p 6379
auth your_password
ping
Redis配置文件与Systemd服务详解
Redis配置文件详解
基本配置部分
# 基本配置
bind 0.0.0.0
port 6379
daemonize no
dir /root/redis/data
logfile /root/redis/logs/redis.log
bind 0.0.0.0
- 指定Redis监听的IP地址
0.0.0.0
表示监听所有网络接口- 生产环境建议改为指定IP,提高安全性
- 如果只需本地访问,可设置为
127.0.0.1
port 6379
- Redis服务器监听端口
- 6379是Redis的默认端口
- 可以修改以提高安全性
- 注意修改后需同步修改客户端连接配置
daemonize no
- 控制Redis是否以守护进程方式运行
- 设置为
no
是因为使用systemd管理服务 - 如果设置为
yes
,可能与systemd的进程管理冲突 - systemd需要直接管理前台进程
dir /root/redis/data
- Redis工作目录
- 用于存储数据文件(RDB文件)
- 存储AOF文件
- 需确保目录存在且有正确的权限
logfile /root/redis/logs/redis.log
- 日志文件位置
- 记录Redis运行状态、错误信息
- 对问题诊断非常重要
- 建议定期轮转日志文件
数据持久化配置
# 数据持久化配置
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfilename "appendonly.aof"
RDB持久化配置:
save 900 1
: 900秒内至少1个键被修改,则触发保存save 300 10
: 300秒内至少10个键被修改,则触发保存save 60 10000
: 60秒内至少10000个键被修改,则触发保存- 这三个条件是"或"的关系,满足任一条件就会触发RDB
AOF持久化配置:
appendonly yes
: 启用AOF持久化appendfilename "appendonly.aof"
: AOF文件名- AOF记录所有写操作,可以完整恢复数据
- 相比RDB更安全,但文件较大
内存配置
# 内存配置
maxmemory 256mb
maxmemory-policy allkeys-lru
maxmemory 256mb
- 设置Redis最大内存使用量
- 根据服务器实际可用内存调整
- 建议留出足够系统运行的内存
- 可用单位:kb, mb, gb
maxmemory-policy allkeys-lru
- 内存达到上限时的淘汰策略
allkeys-lru
: 对所有键使用LRU算法淘汰- 其他可选策略:
volatile-lru
: 只对设置了过期时间的键使用LRUallkeys-random
: 随机淘汰volatile-ttl
: 淘汰最早过期的键noeviction
: 不淘汰,写入报错
安全配置
# 安全配置
requirepass your_password
- 设置Redis访问密码
- 建议使用强密码
- 密码应包含大小写字母、数字和特殊字符
- 生产环境绝对不能省略此配置
Systemd服务文件详解
[Unit]
Description=Redis In-Memory Data Store
After=network.target
Unit 部分
Description
: 服务描述,用于systemctl status显示After
: 指定服务启动顺序,确保网络就绪后再启动Redis
[Service]
Type=simple
Environment=statedir=/root/redis
User=root
Group=root
ExecStart=/usr/bin/redis-server /root/redis/conf/redis.conf
Restart=always
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
Service 部分
Type=simple
- 指定服务类型
simple
: 主进程是服务进程- 适用于前台运行的程序
- 对应Redis配置中的
daemonize no
Environment=statedir=/root/redis
- 设置环境变量
- 定义Redis根目录
- 可被服务中其他配置引用
User=root
和Group=root
- 指定运行服务的用户和组
- 生产环境建议创建专门的redis用户
- 遵循最小权限原则
ExecStart=/usr/bin/redis-server /root/redis/conf/redis.conf
- 启动命令
- 指定Redis服务器程序路径
- 指定配置文件路径
Restart=always
- 服务崩溃时自动重启
always
: 无论什么原因导致服务停止都重启- 提高服务可用性
RuntimeDirectory=redis
和RuntimeDirectoryMode=0755
- 创建运行时目录
/run/redis
- 设置目录权限为755
- 用于存储PID文件等临时数据
- 创建运行时目录
[Install]
WantedBy=multi-user.target
Install 部分
WantedBy=multi-user.target
- 指定服务安装的目标
multi-user.target
: 多用户模式- 使服务可以开机自启
常见问题
- 连接被拒绝
- 检查bind配置是否为0.0.0.0
- 检查防火墙设置
- 检查云服务器安全组配置
- 认证失败
- 确认密码是否正确
- 检查requirepass配置
- 服务无法启动
- 检查日志文件
- 确认配置文件格式正确
- 验证目录权限
django的setting配置:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://123.56.218.56:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"PASSWORD": "syd233",
"CONNECTION_POOL_KWARGS": {
"max_connections": 100,
},
"PICKLE_VERSION": -1 # 使用最新的pickle版本
}
}
}
# 将Redis设置为Django的默认缓存后端
DJANGO_REDIS_CONNECTION_FACTORY = "django_redis.pool.ConnectionFactory"
DJANGO_REDIS_LOG_IGNORED_EXCEPTIONS = True
评论区