目录
遇到的问题
- 替换rdb文件后执行 命令重启redis, rdb被覆盖;
docker restart redis - 注意事项:
- 一定要先停止redis容器再替换rdb, 最后启动
- 除此之外还要检查redis.config文件有没有开启aof备份, 如果开启了会优先加载文件夹下的aop文件
docker stop redis
# 替换rdp文件
docker start redisdocker里安装redis
执行命令
| docker pull redis | 下载最新版Redis镜像 (其实此命令就等同于 : docker pull redis:latest ) |
| docker pull redis:xxx | 下载指定版本的Redis镜像 (xxx指具体版本号) |
检查镜像
docker images创建Redis配置文件
启动前需要先创建Redis外部挂载的配置文件 ( /mydata/redis/conf/redis.conf )
之所以要先创建 , 是因为Redis本身容器只存在 /etc/redis 目录 , 本身就不创建 redis.conf 文件
当服务器和容器都不存在 redis.conf 文件时, 执行启动命令的时候 docker 会将 redis.conf 作为目录创建 , 这并不是我们想要的结果 .
## 创建目录
mkdir -p /mydata/redis/conf
## 创建文件
touch /mydata/redis/conf/redis.conf创建Redis容器并启动
docker run \
-d \
--name redis \
-p 6379:6379 \
--restart unless-stopped \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
redis:buster 
docker远程访问
编辑docker.service
vi /usr/lib/systemd/system/docker.service
添加注释掉下面内容
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
开放端口
### 开放端口
firewall-cmd --zone=public --add-port=2375/tcp --permanent
### 关闭端口
firewall-cmd --zone=public --remove-port=2375/tcp --permanent
### 配置立即生效
firewall-cmd --reload
###查看防火墙所有开放的端口
firewall-cmd --zone=public --list-ports
###关闭防火墙
systemctl stop firewalld.service
###查看防火墙状态
firewall-cmd --stateRedis自启动
docker update redis --restart=always设置redis镜像自动启动
查看Redis是否运行
### 查看Docker运行中的容器
docker ps
docker ps | grep redis
进入Redis容器
### 通过 Docker 命令进入 Redis 容器内部
docker exec -it redis /bin/bash
docker exec -it redis bash
### 进入 Redis 控制台
redis-cli
### 添加一个变量为 key 为 name , value 为 bella 的内容
> set name bella
### 查看 key 为 name 的 value 值
> get name
### 或者也可以直接通过Docker Redis 命令进入Redis控制台 (上面两个命令的结合)
docker exec -it redis redis-cli
### 查看rdp文件名称
config get dbfilename退出容器
exit
RDB AOF
RDB
具体过程:
- Redis调用fork创建一个子进程。(父子进程共享内存,直至其中一个进程对内存进行了写操作)
- 子进程负责将数据写入一个临时文件,父进程则继续处理数据库读写请求。
- 完全写入成功后,调用rename将新的RDB文件替换原来的RDB文件
- save调用SAVE命令时,Redis会执行同步保存,阻塞所有客户端,不再响应客户端发送的请求。SAVE命令一般来说只用于没有足够内存执行.如果内存中的数据非常大,可能会花费很多的时间,这样客户端的请求都会被阻塞!
- bgsave:(background save) 命令,会fork出一个子进程,同时使用写时复制,将内存中的数据复制一份,写到一个新的rdb文件中。此时客户端的命令依然可以被正常执行,查询命令依然查询旧的数据,如果是修改命令,要同时修改原数据和复制出来的这份数据。对于等待保存占用的时间不敏感时才会使用。调用SHUTDOWN命令关闭服务器时也会先执行一次SAVE命令。
AOF 持久化
将修改的每一条指令记录进文件appendonly.aof中(先写入os cache,每隔一段时间fsync到磁盘)。

生产环境可以都启用,redis启动时如果既有rdb文件又有aof文件则优先选择aof文件恢复数据(数据恢复的更多,应为AOF方式丢失数据最小),因为aof一般来说数据更全一点。
AOF持久化方式的缺点是如果数据比较大的话,这个aof文件本身会比较大,而且恢复起来的速度比较慢。
AOF持久化方式的优点是可以将丢失的数据控制在1s中内,我们可以配置1s中同步一次。
#启动docker
service docker start
#停止docker
service docker stop
#重启docker
service docker restart
# 开机自启
systemctl enable docker
版权声明:本文为qq_30934923原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。