设为首页 收藏本站
查看: 1583|回复: 3

[经验分享] Redis数据持久化

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-1-2 09:02:16 | 显示全部楼层 |阅读模式
Redis数据持久化
      RDB方式与AOF方式,可以单独用一种或两种结合。RDB方式相当于定时全备,AOF方式相当于重做日志。REDIS在RDB与AOF都开启的情况下,启动的时候会加载AOF,因为AOF持久化方式可能丢失的数据更少。

RDB方式
    这种持久化是通过快照完成的,当符合一定条件时Redis会自动将内存中的所有数据进行快照,并存储在硬盘上。
    进行快照的条件由两个参数构成:save <seconds> <changes>
    多个save条件之间是“或”的关系,seconds与changes之间是“与”的关系。
    当条件为真,块照会被触发,然后在dir参数定义的目录,以dbfilename参数定义的文件名(一般是dump.rdb)保存下来。
    举例:
    save 900 1         #900秒内1个key被改动
    save 300 10       #300秒内10个key被改动
    save 60 10000   #60秒内10000个key被改动
    时间最大的一个save后必须是1,假如是比1大的值,比如2,那么只要我每900秒内只改动1个key,那么就永远不会触发快照。
    如果想取消这种持久化方式,所有SAVE参数删除或用一条save ""即可。

快照过程:
1. Redis函数使用fork函数赋值一份当前进程的副本(子进程);
2.父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件;
3.当子进程写完所有数据后,会用临时文件替换RDB文件,至此一次快照操作完成。

注意:
只有快照结束才会将旧的文件替换成新,所以任何时候RDB文件都是完整可用的。
新的RDB文件是开始执行fork一刻的内存数据。
RDB文件是经过压缩的,可以通过配置rdbcompression参数为no以禁用压缩、以节省CPU资源,压缩后的文件更小更利于传输。
可以手动用SAVE命令或BGSAVE命令让Redis执行快照,前者由主线程做快照会堵塞其他请求,后者通过fork出子进程进行。
Redis启动后会读取RDB快照文件,将数据从硬盘载入内存,一般一千万个string,1G的快照需要20-30秒。
查看fork出的子进程
[ldh@hauser redis-2.8.3]$ redis-cli -p 6389 -a pass1234 bgsave && ps -ef | grep redis
Background saving started
ldh 31080 30072 0 11:46 pts/3 00:00:00 redis-server *:6389
ldh 31304 31080 0 11:53 pts/3 00:00:00 redis-rdb-bgsave *:6389

AOF方式
    开启AOF持久化后,每执行一条会更改Redis中数据的命令,Redis就会将该命令写入硬盘中的AOF文件。这种写是异步的,通过后台进程处理。默认情况下AOF方式没有开启,可以通过appendonly参数设为yes来开启。AOF文件的保存位置和RDB文件位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof,可以通过appendfilename参数修改。
    事实上,appendonly.aof是纯文本格式,打开后也能轻易看懂我们做过的操作。随着执行命令的增多,AOF文件会变得越来越大。所以我们希望删除其中没用的条目。
例如
set foo 1
set foo 2
set foo3
第3条的效果会覆盖前两条,我们只需要保留第三条即可。实际上,我们通过设置这两个参数,来使文件达到条件就自动重写。
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
实例启动后,会记得首次rewrite完后文件大小。例如是100mb,那么下次要到200mb,我们才超出100%,才会rewrite。如果实例启动以来还没rewrite过,那么启动时文件多大,就作为上次rewrite数。
这里为了防止文件太小也rewrite,例如上次是10mb,这次到了20mb就rewrite,规定了必须得到64mb以上才能进行rewrite操作。将percentage设为0,可以禁用rewrite特性。
其实rewrite的时候,调用的命令是BGREWRITEAOF,我们也可以手工调用它来执行rewrite。rewrite完后,冗余的数据就被删除了。启动时,redis会将AOF文件中的每条命令载入内存,可以想象,速度肯定比RDB会慢一些。

缓存同步
上述所谓的写到条目写到aof文件,往往其实只是写到OS的缓存。默认情况下系统30秒执行一次同步操作,以便将缓存真正写入磁盘。难道我们AOF必须忍受最高30秒内的数据损失?我们通过appendfsync参数设置同步时机。在一定时机,redis会用fsync()系统调用来通知系统将缓存同步到磁盘。
# appendfsync always  --aof文件每有写入就通知系统同步缓存
appendfsync everysec  --每秒,安全性与快捷性的折衷
# appendfsync no        --交给OS自己决定同步缓存时机



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-12968-1-1.html 上篇帖子: Redis复制 下篇帖子: 【Redis笔记】 第1篇: redis基本概念简介

尚未签到

发表于 2014-1-2 10:19:25 | 显示全部楼层
如果有一天,我离开,我就永远不再回来

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2014-1-2 19:32:51 | 显示全部楼层
如果我说这一首歌很好听,请你认真听清歌词,因为那是我想让你懂的心情。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2014-1-3 05:12:49 | 显示全部楼层
也许,也许我只适合一个人,谁都不适合做我的朋友.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表