【Redis实践】(一)使用Docker安装Redis并配置持久化策略

1.简单的启动一个Redis

使用docker可以简单的启动一个Redis,只需要从docker仓库中拉取到redis的镜像,然后直接运行即可,依次执行如下脚本。

# 从docker仓库中拉取redis最新的镜像
docker pull redis
# 运行一个redis容器
docker run --name redis -p 6380:6379 -d redis
# 运行redis容器,并指定密码
docker run --name redis -p 6380:6379 -d redis --requirepass "123456"

简单的解释一下上面参数的意思:
--name:指定容器的名字,这个名字是唯一的。
-p:做端口映射,6380:6379,前一个端口是指的安装docker的宿主机的端口,后一个端口指的是docker容器的端口。如果在同一个宿主机上,要启动多个redis容器实例的话,就需要修改前一个端口号。
-d:表示在后台启动容器
--requirepass:redis的配置参数,这里指的是redis访问密码。
在这里插入图片描述
注:如果需要在docker启动时自动启动容器,再运行一个docker的命令即可

docker update redis --restart=always

启动好了之后,就可以通过redis的客户端进行操作了,使用exec命令可以打开docker容器。

# 打开redis客户端;redis表示的是容器名称;redis-cli是容器里面的小型linux系统指令,用来打开redis客户端
docker exec -it redis redis-cli

-i:表示交互式的运行
-t:表示分配可以输入指令的终端。
两者一般是一同使用的。

由于设置里密码,这里需要先验证密码。
在这里插入图片描述
验证完成之后,就能够使用了,尝试set几个数据。
在这里插入图片描述

2.redis的持久化

redis的持久化策略有RDB和AOF两种,默认使用的是RDB快照的形式,对于docker运行redis容器来说,我们不妨猜测一下,如果重启了redis容器,之前保存的数据是否还存在?
下面就重启一下redis容器。

docker restart redis

再次进入终端参看之前set的key还在不在,发现还是存在。
在这里插入图片描述
这是因为redis容器中保存了RDB快照文件,就在容器的data目录下,使用下面的脚本打开容器就可以看到。

docker exec -it redis bash

重启redis时会重新加载这个快照文件。
在这里插入图片描述

执行到这里,又有新的问题出现了。

  1. 这个快照文件是保存在容器中的,如果想对这个快照进行备份该怎么处理呢?
  2. 怎么去设置快照的自动保存时间规则呢?
  3. 如何灵活的去打开和关闭AOF的持久化策略呢?

要解决这些问题,就需要使用redis的配置文件redis.conf进行自定义的配置,然后docker通过自定义的redis.conf来进行启动。

2.1.redis.conf下载

redis的每个版本都有一个默认的redis.conf配置文件,这个配置文件可以在官网去下载,也可以下载对应版本的tar包,从tar包中获取。
附:Redis tar包下载地址

在下载之前,先查看docker容器中的redis版本,打开redis-cli,通过info指令可以获取到版本号。
在这里插入图片描述
我这里是6.2.5,所以我对应下载的就是6.2.5的tar包。
注:redis.conf的版本需要和redis容器的版本一致,否则可能会启动失败。


现在有了redis.conf文件,要完成将rdb和aof文件保存到宿主机中,还需要两个步骤:

  1. 准备两个文件路径,一个存放redis.conf文件,一个用于存放持久化文件,并修改redis.conf 配置持久化策略。
  2. 将redis容器中的配置文件和持久化文件路劲映射到上面准备的路径中。

2.2.配置持久化策略

先准备两个文件路径以备用,后面的映射需要用到:

  • 配置文件路径:/usr/local/ls/config/redis
  • 持久化文件路径:/usr/local/ls/data/redis

然后将下载好的redis.conf文件扔到配置文件路径中,做持久化策略,只需要修改两处位置,其他的可以使用默认配置。

RDB配置:
通过vim编辑配置文件,输入/SNAP回车,找到快照配置。
在这里插入图片描述
根据上面的英文注释可知,save 3600 1,表示在一个小时内至少有1个key发生变化,就会保存快照,下面两个同理。也可以根据这个语法,自定义快照保存的规则。

同时需要配置持久化文件的保存路径,在SNAPSHOTING的最后一行。
在这里插入图片描述

注:这里修改为/data,是因为redis容器中存放快照文件的路径就是/data,方便后面做映射,当然也可以修改为其他的可用路径。

AOF配置:
使用/appendonly,回车找到AOF配置的位置,打开AOF策略。
在这里插入图片描述
配置完成之后,:wq保存并退出。


注:如果需要远程访问redis,还需要将配置文件中绑定127.0.0.1注释掉
输入/bind 127.0.0.1
在这里插入图片描述

2.3.配置映射并启动

启动脚本如下:

docker run --name redis01 -p 6340:6379 \
-v /usr/local/ls/data/redis:/data \
-v /usr/local/ls/config/redis/redis.conf:/etc/redis/redis.conf --privileged=true -d redis \
redis-server /etc/redis/redis.conf

--privileged=true:表示给容器root权限,否则无法使用appenonly。
-v:docker的Volume指令,将数据同步到映射中的宿主机的路径中去,路径以:隔开,左侧为宿主机路径,右侧为容器路径。
redis-server:表示使用右侧路径中的配置文件启动。

容器启动时会将宿主机路径/usr/local/ls/config/redis/redis.conf同步到容器的/etc/redis/redis.conf/中,然后容器通过这个etc路径下的配置文件进行启动。
同时在2.2.中配置的dir /data也会在redis运行过程中,将持久化文件同步到宿主机中去。

现在可以测试一下持久化策略有没有生效,打开redis客户端,随便输入几个key:
在这里插入图片描述
然后打开上面映射好的宿主机路径/usr/local/ls/data/redis查看,可以看到aof日志已经保存下来了。
在这里插入图片描述
再尝试重启redis容器,测试数据是否完整,依次执行下面的脚本

docker restrat redis01
docker exec -it redis01 redis-cli

keys *	

在这里插入图片描述
结果显示,持久化策略已经配置成功了。

RDB文件去哪里了?
因为配置的策略是一小时内有1条会生成,现在录入了3条数据,但是时间还没到,就还没有生成。
除此之外,还有手动去生成RDB文件,下面几个指令都可以。

  • save:生成一个快照
  • bgsave:后台fork一个进程生成快照。
  • shutdown:会先调用save方法。

docker对容器的停止、重启也会触发快照的生成。

  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挥之以墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值