Redis持久化-RDB

Redis是什么?

redis是一个开源的key-value存储系统,和memcached类似,它支持存储的value类型相对更多 。包括String list set zset hash,这些数据类型都支持push/pop add/remove及取交集并集和差集及更丰富的操作

这些操作都是原子性的,并且,redis支持各种不同方式的排序,与memcached一样,为了保证效率,数据都是存储在内存中的,区别就是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件

并且在此基础上实现master-slave(主从)同步

1、准备工作,这里安装的redis版本是5.0.5,安装目录如下:

 2.启动redis

修改redis.conf里面的daeminize no 改成yes,让服务在后台启动

 3、启动命令,在bin目录下可以看到有redis-server和redis-cli

 执行redis-server /usr/local/redis-5.0.5/redis.conf

启动客户端访问:redis-cli -p 6379

用ping验证,返回pong则成功

 4、rdb持久化两种模式,手动和自动,先看一下自动的配置,在 redis.conf 配置文件中的 SNAPSHOTTING 下

默认如下配置:

看一下其他参数

参数解释:  

stop-writes-on-bgsave-error :默认值为yes。当启用了RDB且最后一次后台保存数据失败,Redis是否停止接收数据。这会让用户意识到数据没有正确持久化到磁盘上,否则没有人会注意到灾难(disaster)发生了。如果Redis重启了,那么又可以重新开始接收数据了

  rdbcompression ;默认值是yes。对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能,但是存储在磁盘上的快照会比较大。

  rdbchecksum :默认值是yes。在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。

  dbfilename :设置快照的文件名,默认是 dump.rdb

  dir:设置快照文件的存放路径,这个配置项一定是个目录,而不能是文件名。默认是和当前配置文件保存在同一目录。

  也就是说通过在配置文件中配置的 save 方式,当实际操作满足该配置形式时就会进行 RDB 持久化,将当前的内存快照保存在 dir 配置的目录中,文件名由配置的 dbfilename 决定。

5、这里改一下快照保存时间方便测试

 6.启动redis后,2分钟内操作10次

 查看usr/local/bin目录下会发现两分钟后出现dump6379.rdb的文件

 注:如果redis被执行shutdown关闭,这个时候也会产生dump6379.rdb文件

 7、手动保存快照

save命令,只管保存,其他不管,全部阻塞,如果内存比较大,就会造成长时间的阻塞

bgsave命令,执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体操作是Redis进程执行fork操作创建子进程,

RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。

8、rdb备份

通过config get dir 查询rdb文件目录,将rdb文件拷贝到其他目录下

 9、rdb恢复

把备份文件拷贝到工作目录下,启动redis 备份数据会直接加载

10、rdb的优缺点

优点:节省磁盘空间,恢复速度快

缺点:虽然redis在fork是使用了写时复制技术,但是如果数据庞大的时,还是比较消耗性能

在备份周期在一定的时间间隔做一次备份,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改

posted on 2020-07-09 15:47  hi梨涡  阅读(635)  评论(0编辑  收藏  举报

导航