准备配置文件
根据自身需要准备配置文件,以下仅作参考,更多配置请查看官网
Redis 配置概述https://redis.io/docs/latest/operate/oss_and_stack/management/config/
# redis.conf
# Redis 实例监听端口,默认 6379
# 如果设置为 0,Redis 将不会监听 TCP 套接字
port 6379
# 数据库数量,默认 16
# 数据库索引从 0 开始,0-15
databases 16
# 客户端空闲超时时间(秒)
# 0 表示永不超时,一直保持连接
timeout 300
# TCP 保活探测间隔(秒)
# 检测死连接,防止僵尸连接占用资源
# 建议 60-300 秒
tcp-keepalive 60
# TCP 监听队列长度(半连接队列)
# 高并发场景建议增大
tcp-backlog 511
# 最大同时连接客户端数
# 默认 10000,根据 ulimit -n 和系统资源调整
# 设置为 0 表示无限制(受系统限制)
maxclients 10000
# 日志级别:debug、verbose、notice、warning
# 生产环境建议使用 notice
loglevel notice
# 日志文件,默认为空,不记录日志,可以指定日志文件名
logfile /var/log/redis/redis-server.log
# #######安全相关
# 监听的地址,默认是127.0.0.1 ,只能本地访问,修改为0.0.0.0则可以任意IP访问
# 可以绑定一个或多个 IP 地址,该IP地址为本机网卡的IP,并非外部主机的IP
# bind 127.0.0.1
# 开发学习环境下可设置为0.0.0.0,生产环境下不要这么配置,根据实际情况修改
bind 0.0.0.0
# 开启时,如果没有显式地绑定到特定的IP地址(即使用bind 0.0.0.0等),并且没有设置密码,那么它将只接受来自本地回环地址(127.0.0.1和::1)的连接,拒绝来自其他网络地址的连接请求,从而防止未经授权的外部访问
protected-mode yes
# 是否以守护进程方式运行,默认 no
# 生产环境建议设置为 yes
# 如果使用docker部署,应当改为no
daemonize no
# 设置连接密码,注释掉则没有
# 警告:因为 Redis 速度非常快,外部用户每秒可以尝试 150k 个密码,所以密码要足够复杂
requirepass 123456
# #######RDB持久化相关配置
# 在 N 秒内数据集至少有 M 个改动时,自动保存一次
# 格式:save <seconds> <changes>
# 可以设置多个 save 条件,满足任一条件都会触发保存
# 设置为 save "" 表示禁用 RDB 持久化
# 900秒(15分钟)内至少有1个key被改变
# 300秒(5分钟)内至少有10个keys被改变
# 60秒(1分钟)内至少有10000个keys被改变
save 900 1
save 300 10
save 60 10000
# 如果后台保存失败,Redis 是否停止接受写操作
# 这可以让用户意识到数据没有正确持久化到磁盘上
# stop-writes-on-bgsave-error yes
# 是否压缩 RDB 文件,默认开启
# 压缩会消耗 CPU,但可以显著减少文件大小
rdbcompression yes
# 是否在保存 RDB 文件后进行校验和检查,默认开启
# 这会在文件末尾添加一个 CRC64 校验和,会有约 10% 的性能损耗
rdbchecksum yes
# RDB 文件名
dbfilename dump.rdb
# 数据库存放目录
# 必须是一个已存在的目录,Redis 会在该目录下创建 RDB 和 AOF 文件
dir /data
# #######AOF持久化相关设置
# 是否开启 AOF 持久化,默认关闭
# AOF 提供比 RDB 更好的持久化保证
appendonly yes
# AOF 文件名
appendfilename "appendonly.aof"
# AOF 同步策略
# always:每次写入都同步,最安全但最慢
# everysec:每秒同步一次,默认,足够安全且性能较好
# no:由操作系统决定何时同步,最快但最不安全
appendfsync everysec
# 当 AOF 重写或写入时,是否禁用 fsync
# 设置为 yes 可能在某些 Linux 配置下延迟较大
no-appendfsync-on-rewrite no
# 自动重写 AOF 文件的条件
# 当 AOF 文件大小比上次重写后增长超过指定百分比时触发重写
auto-aof-rewrite-percentage 100
# AOF 文件最小大小,超过此大小才会考虑自动重写
auto-aof-rewrite-min-size 64mb
# 是否在 Redis 启动时检查并修复 AOF 文件
# 如果 AOF 文件末尾被截断,Redis 可以加载尽可能多的数据
aof-load-truncated yes
# 开启混合持久化(Redis 4.0+)
# AOF 重写时,将 RDB 内容作为前缀写入 AOF 文件
# 加载时先加载 RDB 部分,再加载 AOF 部分
aof-use-rdb-preamble yes
# AOF 重写期间的增量 fsync,默认开启
aof-rewrite-incremental-fsync yes
# #######内存淘汰策略设置
# 最大内存限制,设置为 0 表示无限制
# 可以使用单位:bytes、k/K、m/M、g/G
maxmemory 512m
# 内存达到上限后的淘汰策略
# volatile-lru:从设置了过期时间的 keys 中使用 LRU 算法淘汰
# allkeys-lru:从所有 keys 中使用 LRU 算法淘汰
# volatile-lfu:从设置了过期时间的 keys 中使用 LFU 算法淘汰(Redis 4.0+)
# allkeys-lfu:从所有 keys 中使用 LFU 算法淘汰(Redis 4.0+)
# volatile-random:从设置了过期时间的 keys 中随机淘汰
# allkeys-random:从所有 keys 中随机淘汰
# volatile-ttl:淘汰即将过期的 keys(剩余 TTL 最小的)
# noeviction:不淘汰,返回错误(默认)
maxmemory-policy allkeys-lfu
# LRU/LFU 算法的采样数量
# 数值越大越精确但消耗更多 CPU
maxmemory-samples 5
# LFU 算法的衰减时间(分钟),默认 1
# 控制 LFU 计数器的衰减速度
lfu-decay-time 1
# LFU 计数器的对数因子,默认 10
# 数值越小计数器增长越快
lfu-log-factor 10
# #######慢查询日志
# 慢查询日志阈值(微秒)
# 执行时间超过此值的命令会被记录 10000us=10ms
slowlog-log-slower-than 10000
# 慢查询日志最大长度
slowlog-max-len 128
# 延迟监控阈值(毫秒),0 表示关闭
latency-monitor-threshold 0
部署运行指令
bash
# 这里 \ 是用作换行,实际情况下如果放在一行去写,就可以删掉\
# Linux系统上"\"会被识别为换行,Windows上建议把"\"删掉
docker run -d \
--name redis-server \
-p 6379:6379 \
-v /home/lcx/redis-server/redis-data:/data \
-v /home/lcx/redis-server/redis.conf:/usr/local/etc/redis/redis.conf \
-v /home/lcx/redis-server/redis-logs:/var/log/redis \
--restart=always \
--privileged=true \
--network your_net \
redis \
redis-server /usr/local/etc/redis/redis.conf
-d:以"分离模式"(detached mode)运行容器,即在后台运行容器,不会占用当前的命令行界面。
--name redis-server 指定容器名称为redis-server
-v /home/lcx/redis-server/redis-data:/data 挂载数据卷,前一个目录为宿主机目录,根据自身实际情况修改
-v /home/lcx/redis-server/redis.conf:/usr/local/etc/redis/redis.conf 挂载配置文件,前一个目录为宿主机目录,根据自身实际情况修改
-v /home/lcx/redis-server/redis-logs:/var/log/redis 挂载redis日志目录,前一个目录为宿主机目录,根据自身实际情况修改;其中此处容器内日志文件目录在配置文件中有设置,如果为指定设置,一般在/data目录下
-p 6379:6379 格式(宿主机端口:docker容器内运行端口)redis默认端口为6379,如果配置文件有修改port,则自行修改冒号后的值,如果暴露给外界访问端口想修改则修改冒号前端口
--restart=always 可选,设置容器的重启策略为 always,意味着无论容器因为什么原因退出,Docker 都会自动重启它
--network your_net 可选,指定容器运行网络
redis 格式为 redis[:指定版本] ,不加指定,默认最新
redis-server /usr/local/etc/redis/redis.conf 启动配置文件
可能存在的问题
1、日志文件权限问题 Can't open the log file: Permission denied
查看运行日志
[lcx@bogon redis-server]$ docker logs redis-server
Starting Redis Server
*** FATAL CONFIG FILE ERROR (Redis 8.6.0) ***
Can't open the log file: Permission denied
解决方案:
执行以下指令,修改宿主机文件夹权限
bash
# 设置日志目录权限(Redis 容器内使用 uid 999)
sudo chown -R 999:999 /home/lcx/redis-server/redis-logs
# 同时确保数据目录权限正确
sudo chown -R 999:999 /home/lcx/redis-server/redis-data