redis学习三 ------ redis持久化
2016-06-05 17:35
357 查看
环境:
系统:centos 6.4redis:3.2.0
机器ip: 192.168.10.160 , 192.168.10.161
redis的持久化有两种 , RDB和AOF , 这两种方式都有他们的特点, 可以根据特点在不同的应用场景使用
RDB原理和场景:
说到rdb的原理,首先要说到这个的触发条件 , 一种是手动触发 , 一种是自动触发自动触发 的条件是在 配置文件 中配置的 ,
save 900 1 #900s的时间内如果有一个key有变化,就会触发rdb save 300 10 #300s的时间内如果有10个key有变化 save 60 10000 #60s的时间内如果有10000个key有变化
可以通过 save "" 来禁用
手动触发 是通过在客户端命令行执行 save 或者 bgsave 命令触发的
这两个命令的区别在于 是否会阻塞 当前的客户端请求, save会阻塞客户端请求 , 而bgsave不会阻塞客户端请求,
save是占用当前的主进程将所有的redis数据快照到 rdb 文件中
bgsave是主进程fork一个子进程 , 然后通过 copy - on - write 来讲数据快照到rdb文件中
但是bgsave有一个缺陷 , 因为是使用的 copy - on - write 技术 , 所以 RDB模式需要Redis服务所占内存的1倍的内存 ,如果数据量太大而内存太小的话,
就会导致 数据不会完整的快照到rdb文件中 , 所以rdb技术只是适合备份 , 如果是需要可靠性的话,就需要 AOF 来支持了,下面会介绍 AOF技术
bgsave的工作流程:
Redis调用fork()。于是我们有了父子两个进程。
子进程开始将数据集写入一个临时RDB文件。
当子进程完成了新RDB文件,替换掉旧文件。
rdb除了备份以外 , 另一个重要的应用场景就是 主从同步 了 , 关于redis的主从同步,我的下一篇文章会详细说明
AOF的原理和场景:
aof的方式是类似于 mysql的binlog , 如果大家对于mysql比较熟悉的话,可能会理解的很快 , 和mysql 的binlog 的区别就是 , binlog是可以用于进行mysql主从同步的,
但是aof只是redis用于持久化的方式 .
aof的原理就是用户在客户端的操作命令都会记录到aof文件中 , 触发的条件在配置文件中进行配置 ,
appendonly yes //启用aof持久化方式 # appendfsync always //收到写命令就立即写入磁盘, 最慢 , 但是能够保证完全的持久化 appendfsync everysec //每分钟写入磁盘一次, 在性能和持久化之间做了很好的折中 (默认配置, 很好) #appendfsync no //完全依赖os, 性能最好 , 持久化没有保证
aof主要用户对数据需要高可靠性的场景.
但是记录每次用户的操作记录 , 可能造成的后果是 出现很多的无用指令 , 就是可以被优化的 , 所以 aof 又有着两个配置 ,对aof文件进行重写 ,
#当aof文件达到64m的时候,会自动 重写 aof文件 ,缩小文件大小 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
这段配置的意思是 当aof的文件到达 64m 的时候, 对aof文件进行重写 , 使得aof文件变得更小 , 以后每增长 100%(64m , 128m , 192m ... ) 的时候,都会触发这个优化动作;
但是aof的这个重写操作的原理是 rewrite会像replication一样,fork出一个子进程,创建一个临时文件,遍历数据库,将每个key、value对输出到临时文件。 也就是说 ,
还是 copy-on-write 的问题 ...
每当Redis需要转储数据集到磁盘时,会发生:
Redis调用fork()。于是我们有了父子两个进程。
子进程开始将数据集写入一个临时RDB文件。
当子进程完成了新RDB文件,替换掉旧文件。
相关文章推荐
- redis安装问题小结
- 使用 Redis 和 Python 构建一个共享单车的应用程序
- Redis偶发连接失败案例实战记录
- Redis中实现查找某个值的范围
- win 7 安装redis服务【笔记】
- redis的hGetAll函数的性能问题(记Redis那坑人的HGETALL)
- Redis和Memcached的区别详解
- 分割超大Redis数据库例子
- Redis总结笔记(一):安装和常用命令
- Redis sort 排序命令详解
- 用Redis实现微博关注关系
- Redis实现信息已读未读状态提示
- redis中修改配置文件中的端口号 密码方法
- 在Ruby on Rails上使用Redis Store的方法
- Redis和Memcache的区别总结
- 在Node.js应用中使用Redis的方法简介
- Redis服务器的启动过程分析
- web 应用中常用的各种 cache详解
- 利用yum安装Redis的方法详解
- 从MySQL到Redis的简单数据库迁移方法