redis持久化机制主要是将内存中的数据持久化到磁盘文件中,一种是RDB(快照)文件方式,另一种是AOF(追加)文件。 RDB是在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。 a.修改配置项 save m n 即表示m秒内执行n次命令进行备份,自动触发bgsave命令; b.当Redis从服务器项中主服务器发送复制请求时,主服务器则会使用bgsave命令生成RDB文件,然后传输给从服务器; c.当执行debug reload命令时,也会使用save命令生成RDB文件; d.使用shutdown命令关闭服务,如果没有启用aof方式实现持久化则会采用bgsave方式;
禁用自动备份,删除save后面的参数即可; 主要采用save和bgsave命令; RDB快照实现过程: 注意:Redis进行快照期间,不会修改RDB文件,直至替换完成;所以任意时刻RDB文件都是完整的; 综合上面的备份方式,相信大家能够想到一些触发RDB机制的时机,例如: 将dump.rdb 文件拷贝到redis的安装目录的bin目录下,重启redis服务即可。在实际开发中,一般会考虑到物理机硬盘损坏情况,选择备份dump.rdb 。 上面的理论知识介绍结束了,下面小编便带着小伙伴实际动手操作配置一下; 修改redis.conf中配置: 1)触发保存 我们先研读官网,解释一下save 参数的意义 save 900 1 #900秒内至少一个key发生改变 为测试持久化效果,将持久化频率提高一点,设置如下: 2) 文件名称: 3) 文件存放目录: 4)默认开启数据压缩 说明:配置存储至本地数据库时是否压缩数据,默认为yes。Redis采用LZF压缩方式,但占用了一点CPU的时间。若关闭该选项,但会导致数据库文件变的巨大。建议开启。 5)设置日志文件路径: 官网解释:指定日志文件名。也可以使用空字符串强制Redis登录标准输出。请注意,如果使用标准 优点: 缺点: 打开日志文件,验证自动备份是否生效绪论
小编基于centos7环境搭建Redis,如果未安装redis环境,请参考小编另一篇文章:轻松在阿里云上搭建redis。
本篇主要以RDB方式为主线,开始步入正文吧。RDB
RDB持久化方式:默认使用;
将Redis存在内存中的数据以快照的方式写入二进制文件中,并保存在本地磁盘中。
默认的文件名是dump.rdbRDB备份方式
自动备份
手动备份
save命令同步阻塞,save采用主进程进行快照备份,会阻塞其他请求;
bgsave是非阻塞;bgsave采用fork子进程进行快照;实现过程
a.父进程执行fork函数复制父进程创建其副本(子进程),fork子进程期间,父进程会阻塞;
b.父进程fork结束之后,bgsave会返回提示信息,此后父进程不再被阻塞,可以响应其他请求;
c.子进程开始创建临时RDB文件,将父进程的内存数据开始写入磁盘临时快照文件中,执行结束后会替换旧的RDB文件,至此完成一次RDB快照操作;触发时机
1.在指定的时间间隔内,执行指定次数的写操作;
2.执行save(阻塞, 只管保存快照,其他的等待) 或者是bgsave (异步)命令;
3.执行flushall 命令,清空数据库所有数据;
4.执行shutdown 命令,保证服务器正常关闭且不丢失任何数据;恢复数据
RDB持久化配置
扩展一个查找关键字快捷键:进入vi打开文件后,命令模式下输入 / 关键字 按n查找下一个,按Shift+n查找上一个。 比如此处/ save;
# # Save the DB on disk: # save 秒 修改 # save <seconds> <changes> # 一定时间内,数据库修改记录数超过指定个数,则会触发快照保存 # Will save the DB if both the given number of seconds and the given # number of write operations against the DB occurred. # ... # 注意:您可以通过注释掉所有“save”行来完全禁用保存。 # Note: you can disable saving completely by commenting out all "save" lines. # 可以通过添加带有单个空字符串参数的save指令来删除所有先前配置的存储点,如以下示例所示 # save ""
save 300 10 #300秒至少10个key发生改变 save 10 1
# The filename where to dump the DB dbfilename dump.rdb
# Note that you must specify a directoryhere, not a file name. dir ./
rdbcompression yes
Specify the log file name. Also the empty string can be used to force # Redis to log on the standard output. Note that if you use standard # output for logging but daemonize, logs will be sent to /dev/null logfile "" 将路径写""引号内,小编将日志路径设置为/var/log/redis/redis.log
日志输出,但daemonize,日志将发送到/dev/null。
通俗地讲:如果不设置redis.conf 里的logfile。 就会导致redis无法写日志, 进而导致,无法把redis数据写入到磁盘文件里。小编未设置日志路径时,一直无法确认是否持久化成功。
设置步骤:
1.vi redis.conf
2.搜索关键词logfile,将日志文件路径填到后面的引号”“内,如”/var/log/redis/redis.log”
3.手动建立日志文件所在的文件夹,手建立/var/log/redis/
4.保存配置文件,并以此配置文件重启redis
如果第三步中不新建文件夹,重新启动便会报错,如下图:
新建日志文件后重新启动redis服务,便可以查看日志文件,如图:
优缺点
1.适合大规模的数据恢复,RDB快照文件采用二进制压缩方式,重启加载数据时快于AOF方式;
2.文件实现数据快照,全量备份,便于数据的传输;
1 数据的完整性和一致性不高,因为RDB可能在最后一次备份时宕机了。
2 备份时占用内存,因为Redis 在备份时会独立创建一个子进程,将数据写入到一个临时文件(此时内存中的数据是原来的两倍哦),最后再将临时文件替换之前的备份文件。实践演示
# 自动触发保存 10秒内至少一个key发生改变 [root@izbp14najjyuhkvm4qbic7z redis]# redis 127.0.0.1:6379> hget user1 username "redis1" 127.0.0.1:6379> hset user2 username redis2 (integer) 1 127.0.0.1:6379> hget user2 username "redis2" 127.0.0.1:6379> exit
[root@izbp14najjyuhkvm4qbic7z redis]# redis 127.0.0.1:6379> set key1 ceshiBgSave OK 127.0.0.1:6379> get key1 "ceshiBgSave" 127.0.0.1:6379> bgsave Background saving started 127.0.0.1:6379> exit
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算