在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
  1. bind 0.0.0.0

    • 指定Redis监听的IP地址
    • 0.0.0.0 表示监听所有网络接口
    • 生产环境建议改为指定IP,提高安全性
    • 如果只需本地访问,可设置为 127.0.0.1
  2. port 6379

    • Redis服务器监听端口
    • 6379是Redis的默认端口
    • 可以修改以提高安全性
    • 注意修改后需同步修改客户端连接配置
  3. daemonize no

    • 控制Redis是否以守护进程方式运行
    • 设置为no是因为使用systemd管理服务
    • 如果设置为yes,可能与systemd的进程管理冲突
    • systemd需要直接管理前台进程
  4. dir /root/redis/data

    • Redis工作目录
    • 用于存储数据文件(RDB文件)
    • 存储AOF文件
    • 需确保目录存在且有正确的权限
  5. logfile /root/redis/logs/redis.log

    • 日志文件位置
    • 记录Redis运行状态、错误信息
    • 对问题诊断非常重要
    • 建议定期轮转日志文件

数据持久化配置

# 数据持久化配置
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfilename "appendonly.aof"
  1. RDB持久化配置:

    • save 900 1: 900秒内至少1个键被修改,则触发保存
    • save 300 10: 300秒内至少10个键被修改,则触发保存
    • save 60 10000: 60秒内至少10000个键被修改,则触发保存
    • 这三个条件是"或"的关系,满足任一条件就会触发RDB
  2. AOF持久化配置:

    • appendonly yes: 启用AOF持久化
    • appendfilename "appendonly.aof": AOF文件名
    • AOF记录所有写操作,可以完整恢复数据
    • 相比RDB更安全,但文件较大

内存配置

# 内存配置
maxmemory 256mb
maxmemory-policy allkeys-lru
  1. maxmemory 256mb

    • 设置Redis最大内存使用量
    • 根据服务器实际可用内存调整
    • 建议留出足够系统运行的内存
    • 可用单位:kb, mb, gb
  2. maxmemory-policy allkeys-lru

    • 内存达到上限时的淘汰策略
    • allkeys-lru: 对所有键使用LRU算法淘汰
    • 其他可选策略:
      • volatile-lru: 只对设置了过期时间的键使用LRU
      • allkeys-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 部分

  1. Type=simple

    • 指定服务类型
    • simple: 主进程是服务进程
    • 适用于前台运行的程序
    • 对应Redis配置中的daemonize no
  2. Environment=statedir=/root/redis

    • 设置环境变量
    • 定义Redis根目录
    • 可被服务中其他配置引用
  3. User=rootGroup=root

    • 指定运行服务的用户和组
    • 生产环境建议创建专门的redis用户
    • 遵循最小权限原则
  4. ExecStart=/usr/bin/redis-server /root/redis/conf/redis.conf

    • 启动命令
    • 指定Redis服务器程序路径
    • 指定配置文件路径
  5. Restart=always

    • 服务崩溃时自动重启
    • always: 无论什么原因导致服务停止都重启
    • 提高服务可用性
  6. RuntimeDirectory=redisRuntimeDirectoryMode=0755

    • 创建运行时目录 /run/redis
    • 设置目录权限为755
    • 用于存储PID文件等临时数据
[Install]
WantedBy=multi-user.target

Install 部分

  • WantedBy=multi-user.target
    • 指定服务安装的目标
    • multi-user.target: 多用户模式
    • 使服务可以开机自启

常见问题

  1. 连接被拒绝
  • 检查bind配置是否为0.0.0.0
  • 检查防火墙设置
  • 检查云服务器安全组配置
  1. 认证失败
  • 确认密码是否正确
  • 检查requirepass配置
  1. 服务无法启动
  • 检查日志文件
  • 确认配置文件格式正确
  • 验证目录权限

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