Docker部署Redis

Docker部署Redis

创建数据卷映射目录

这里我存放的路径为data/app为例,按需创建data、conf、log目录

1
2
3
mkdir -p /data/app/redis/data
mkdir -p /data/app/redis/conf
mkdir -p /data/app/redis/log

image-20240320142226287

获取配置文件

关于拉取配置文件这里建议访问redisConfig看一下,当前稳定的版本是哪些

image-20240320161533213

截止至此文发布时最新版本为7.2,这里直接拿7.2做演示,在RedisGithub仓库中找到对应版本的redis.conf文件,点击复制

image-20240320162052637

/data/app/redis/conf/路径下创建redis.conf文件,随后修改文件,直接将复制的内容粘贴进去

1
2
3
4
touch redis.conf
vim redis.conf

vi redis.conf

修改配置文件

1
2
3
4
5
6
7
vim redis.conf

# 常见的配置项 这里仅作参考
daemonize yes #是否以守护进程方式运行
port 6379 # Redis服务器监听的端口
bind 127.0.0.1 # 绑定的主机IP地址
requirepass #设置密码
常用注释说明
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# 通用设置
daemonize no # 是否以守护进程方式运行 Redis
pidfile /var/run/redis_6379.pid # Redis 进程 ID 文件路径
port 6379 # Redis 监听的端口号
bind 127.0.0.1 # Redis 监听的地址(默认为本地回环地址)
requirepass # 密码配置

# 连接设置
timeout 0 # Redis 客户端连接超时时间
tcp-keepalive 0 # 是否开启 TCP keepalive

# 通信协议设置
tcp-backlog 511 # TCP listen() 函数的等待队列长度
tcp-keepalive 300 # TCP keepalive 时间间隔,单位为秒
unixsocket /var/run/redis/redis.sock # Unix 套接字文件路径
unixsocketperm 700 # Unix 套接字文件的权限

# 通用配置项
loglevel notice # 日志记录级别
logfile /var/log/redis/redis.log # 日志文件路径
syslog-enabled no # 是否将日志输出到系统日志
syslog-ident redis # 系统日志标识符
syslog-facility local0 # 系统日志设施
databases 16 # Redis 数据库数量

# 快照配置项
save 900 1 # 触发快照保存的条件(900 秒内至少有一个键被修改)
save 300 10 # 触发快照保存的条件(300 秒内至少有 10 个键被修改)
save 60 10000 # 触发快照保存的条件(60 秒内至少有 10000 个键被修改)
stop-writes-on-bgsave-error yes # 快照保存出错时是否停止写入操作
rdbcompression yes # 是否开启 RDB 文件压缩
rdbchecksum yes # 是否开启 RDB 文件校验
dbfilename dump.rdb # RDB 文件名

# AOF 配置项
appendonly no # 是否开启 AOF 持久化
appendfilename "appendonly.aof" # AOF 持久化文件名
appendfsync everysec # AOF 持久化的同步方式
no-appendfsync-on-rewrite no # 是否在 AOF 重写时禁止同步
auto-aof-rewrite-percentage 100 # 触发 AOF 重写的条件(AOF 文件大小增长率达到 100%)
auto-aof-rewrite-min-size 64mb # 触发 AOF 重写的条件(AOF 文件最小大小)
aof-load-truncated yes # 是否在 AOF 文件被截断时继续加载剩余内容

# 主从复制配置项
slave-serve-stale-data yes # 从节点是否在主节点不可用时仍然向客户端提供服务
slave-read-only yes # 从节点是否只读
repl-diskless-sync no # 是否在复制时避免使用磁盘
repl-diskless-sync-delay 5 # 复制时磁盘同步延迟时间,单位为秒
repl-ping-slave-period 10 # 主节点发送 ping 命令的时间间隔,单位为秒
repl-timeout 60 # 主从节点之间的心跳超时时间,单位为秒
repl-disable-tcp-nodelay no # 是否禁用 TCP_NODELAY 算法
slave-priority 100 # 从节点优先级

# Sentinel 配置项
sentinel deny-scripts-reconfig yes # 是否允许 Sentinel 脚本重新配置 Redis
sentinel monitor mymaster 127.0.0.1 6379 2 # 监控的主节点名称、IP 地址、端口号、quorum
sentinel down-after-milliseconds mymaster 30000 # 主节点失效判定时间,单位为毫秒
sentinel failover-timeout mymaster 180000

# 附加配置项
always-show-logo
# 是否在命令行启动时显示 Redis Logo,默认为 yes。可以将该选项设置为 no,以屏蔽 Redis Logo 的显示。
hz
# 控制 Redis 在每秒钟运行的循环次数。默认为 10,表示每秒钟运行 10 次循环。可以将该选项设置为一个正整数,以控制 Redis 运行的速度
include
# 允许在配置文件中包含其他文件,默认为 "",表示不包含其他文件。可以将该选项设置为实际文件名,以包含其他文件的配置项。
lua-time-limit
# 控制 Lua 脚本的执行时间限制,默认为 5000 毫秒。可以将该选项设置为一个正整数,以控制 Lua 脚本的最长执行时间。
repl-backlog-size
# 控制 Redis 复制功能的回放缓冲区大小,默认为 1MB。可以将该选项设置为一个正整数,以控制回放缓冲区的大小。
repl-diskless-sync
# 是否在复制时避免使用磁盘,即将数据直接从主节点传输到从节点的内存中,默认为 no。可以将该选项设置为 yes,以避免磁盘的使用。
repl-ping-slave-period
# 控制主节点发送 ping 命令的时间间隔,默认为 10 秒。可以将该选项设置为一个正整数,以控制 ping 命令的发送间隔。
repl-timeout
# 控制主从节点之间的心跳超时时间,默认为 60 秒。可以将该选项设置为一个正整数,以控制心跳超时时间。
appendonly
# 是否开启 AOF 持久化,默认为 no。AOF 持久化可以保证 Redis 在宕机时不会丢失数据,但会增加额外的磁盘写入操作。
appendfilename
# AOF 持久化文件名,默认为 appendonly.aof。可以将该选项设置为实际文件名。
appendfsync
# AOF 持久化的同步方式,默认为 everysec。可以将该选项设置为 always、everysec 或 no,分别表示每个写入命令时同步、每秒同步一次或不同步。
save
# RDB 持久化的触发条件,默认为 save 900 1,表示如果 900 秒内至少有一个键被修改,则执行 RDB 持久化。可以设置多个触发条件,例如 save 300 10 表示如果 300 秒内至少有 10 个键被修改,则执行 RDB 持久化。
rdbcompression
# 是否开启 RDB 文件压缩,默认为 yes。开启压缩可以减少磁盘空间的占用,但会增加 CPU 的负载。
maxmemory-policy
# Redis 内存达到最大限制后的淘汰策略,默认为 noeviction,表示停止写入操作。其他可选策略包括 volatile-lru、volatile-ttl、volatile-random、allkeys-lru、allkeys-random 等。
client-output-buffer-limit
# 控制客户端输出缓冲区的大小,默认为 client-output-buffer-limit normal 0 0 0,表示不限制缓冲区大小。可以将该选项设置为实际缓冲区大小,以避免客户端输出缓冲区溢出。
notify-keyspace-events
# 开启键空间通知功能,默认为 "",表示关闭键空间通知功能。可以将该选项设置为 KEA、KgE、lsh、E、gxE 等,表示监听不同类型的键空间事件。

启动redis容器

在启动Redis容器前,请确定你的数据卷映射。在下属示例中,数据卷映射的路径为/data/app/redis/xxxx,如果不一样请记得修改。启动容器后,系统将自动从远程仓库拉取相应版本的Redis镜像。请务必确保所拉取的Redis版本与之前复制的配置文件版本一致。

1
2
3
4
5
6
7
8
docker run -p 6379:6379 \
--name redis \
-v /data/app/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /data/app/redis/data:/data \
-v /data/app/redis/logs:/logs \
--restart always \
-d redis:7.2 redis-server /etc/redis/redis.conf \
--appendonly yes

或不指定配置文件启动,不要/etc/redis/redis.conf

1
2
3
4
5
6
7
8
docker run -p 6379:6379 \
--name redis \
-v /data/app/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /data/app/redis/data:/data \
-v /data/app/redis/log:/var/log/redis \
--restart always \
-d redis:7.2 redis-server \
--appendonly yes

必须:

  • -p 6379:6379 端口映射:前表示主机部分,:后表示容器部分。
  • –name myredis 指定该容器名称,查看和进行操作都比较方便。

可选

  • -v 挂载目录,规则与端口映射相同。
  • -d redis 表示后台启动redis
  • redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的录/data/app/redis/conf/redis.conf
  • appendonly yes 开启redis 持久化
  • —restart always 表示开机启动
  • —network serms-net 网卡

image-20240320172830013

常用命令

  • 进入redis容器使用redis-cli命令进行连接
1
docker exec -it redis redis-cli
  • 查看启动日志
1
2
docker logs myredis # 后面跟容器名 or 容器ID 都可以
docker logs --since 30m <容器名> # --since 30m 是查看此容器30分钟之内的日志情况。
  • Docker 停止、删除、重启、启动容器

正常删除容器,一般是先停止容器,再进行删除

1
2
3
4
5
docker stop [容器名|容器ID] #停止容器
docker start [容器名|容器ID] #启动停止的容器
docker restart [容器名|容器ID] # 将容器重新启动
docker kill [容器名|容器ID] #强行终止
docker rm [容器名|容器ID] # 删除停止的容器

常见报错

如果还有其他问题可留言,博主会尽力帮你解决

Redis Client On Error: Error: write ECONNABORTED Config right?

  1. 方法一

    bind 0.0.0.0 注释 或者设置为bind 0.0.0.0

    protected-mode 设置为no

    image-20240320230513561

  2. 方法二

    设置密码

    image-20240320230659087