2018-1-17 by Atlas

redis持久化

将redis在内存中的数据库状态保持到磁盘里面,避免数据意外丢失。

RDB持久化

既可以手动执行,也可以根据服务器配置选项定期执行。

生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成RDB文件时的数据库状态。

RDB文件载入时,服务器一直处于阻塞状态,直到完成。

命令SAVE、BGSAVE

SAVE命令会阻塞redis服务器进程,直到RDB文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理任何命令请求。

BGSAVE命令会派生出一个子进程,然后由子进程负责创建RDB文件,服务器进程(父进程)继续处理命令请求。

AOF文件更新频率通常比RDB文件更新频率高。

so -->

如果开启AOF,服务器优先使用AOF文件还原数据库;

只有AOF关闭,服务器才会使用RDB文件还原数据库。

BGSAVE命令执行时的服务器状态:

(1)BGSAVE执行期间,客户端发送的SAVE命令会被服务器拒绝。

(2)BGSAVE执行期间,客户端发送的BGSAVE命令会被服务器拒绝。

(3)BGSAVE和BGREWRITEAOF不能同时执行:

如果BGSAVE正在执行,那么客户端发送的BGREWRITEAOF会被延迟到BGSAVE后执行;

如果BGREWRITEAOF正在执行,那么客户端发送的BGSAVE会被服务器拒绝。

SAVE保存条件

save 900 1 服务器在900秒之内,对数据库进行了至少1次修改

save 300 10 服务器在300秒之内,对数据库进行了至少10次修改

save 60 10000 服务器在60秒之内,对数据库进行了至少10000次修改

struct redisServer {

// ...

// 记录保存条件的数组

struct saveparam *saveparams;

// 修改计数器

long long dirty;

// 上次执行保存的时间

time_t lastsave;

// ...

}

struct saveparam {

// 秒数

time_t seconds;

// 修改数

int changes;

}

ServerCron 函数检查保存条件的过程

RDB文件结构将和JAVA CLASS文件一同讨论。

AOF持久化

AOF持久化是通过保存redis服务器所执行的 写命令 来记录数据库状态的。

AOF文件内容是纯文本格式。

e.g.

redis> SET msg "hello"

ok

AOF文件内容(SELECT命令是服务器自动添加的):

2\r\n$6\r\nSELECT\r\n$1\r\n0\r\n3\r\n$3\r\n$3\r\nSET\r\n$3\r\nmsg\r\n$5\r\nhello\r\n

AOF持久化实现步骤:

命令追加 --> 文件写入 --> 文件同步

命令追加是将执行的写命令追加到服务器状态的aof_buf缓存区的末尾:

struct redisServer {

// ...

// AOF缓冲区

sds aof_buf;

// ...

}

文件的写入与同步

flushAppendOnlyFile()函数考虑是否要将aof_buf中的内容写入和保存到AOF文件里面,行为由服务器配置的appendfsync选项的值来决定。

appendfsync配置:

always:AOF持久化效率最慢,安全性来说最安全,故障只会丢失一个命令数据。

everysec:AOF持久化效率足够快,安全性来说,故障只会丢失一秒钟的命令数据。

no:AOF持久化效率最快,安全性来说,故障会丢失上次同步AOF文件之后的所有写命令数据。

AOF 文件载入过程

AOF文件重写,解决AOF文件体积膨胀问题。

AOF文件重写原理:

AOF文件重写并不需要对现有的AOF文件进行读取、分析或者写入操作,而是通过读服务器当前的数据库状态来实现的。

AOF文件重写首先从数据库中读取键现在的值,然后用一条命令记录键值对,代替之前记录这个键的多条命令。

如果元素数量超过redis.h/REDIS_AOF_REWRITE_ITEMS_PER_CMD常量的值,那么重写多条命令记录键的值。

AOF文件后台重写过程(BGREWRITEAOF原理)

参考文献:《redis设计与实现》

redis自动持久化到mysql,redis笔记-数据库之持久化策略相关推荐

  1. redis持久化到mysql的方案_redis实现持久化存储的两种方案

    一.简单说明 redis是非关系型数据库,是一种内存型数据库.数据存储在内存中,所以当我们关掉软件,或者拔掉电源时,内存中的数据就会丢失.针对此场景,这里提出持久化的方案.它的核心就是将内存中的数据存 ...

  2. redis springmvc mysql_SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置

    项目环境: 在SpringMVC + MyBatis + Mysql.Redis部署在Linux虚拟机. 1.整体思路 参考Ehcache实现MyBatis二级缓存代码(Maven引用对应jar查阅) ...

  3. MySQL学习笔记数据库学习【二】

    查询练习 一.查询练习的准备 准备创建 几个表: 学生表(Student):学号.姓名.性别.出生年月日.班级 课程表(Course):课程号.课程名称.教师编号 成绩表(Score) :学号.课程号 ...

  4. MySQL学习笔记——数据库的创建、修改与删除

    目录 一.数据库的创建和管理 1.基础知识 1.1 数据储存过程 1.2 标识符的命名规则 1.3 MySQL中的数据类型: 2.创建和管理数据库 2.1 创建数据库 2.2 管理数据库 2.3 修改 ...

  5. 填坑利器?Redis如何弥补传统MySQL架构的不足

    对于技术人来说,Redis最成功的一点就是可以补充和扩展生态系统中的其他数据库.虽然使用新的后端数据库来替换旧的后端数据库,往往会被认为风险巨大.价格昂贵,但是原有的数据库可能很难进行线性扩展以满足用 ...

  6. java redis 下载_redis Java源代码 redis.rar - 下载 - 搜珍网

    压缩包 : redis.rar 列表 redis/.classpath redis/.mymetadata redis/.project redis/.settings/.jsdtscope redi ...

  7. 笔记【Redis数据结构、常用命令、key淘汰及持久化策略】

    文章目录 简要介绍 服务安装 数据结构 通用命令 字符串类型命令 散列类型命令 列表类型命令 集合类型命令 有序集合类型命令 HyperLogLog命令 GeoHash命令(地图坐标) 排序命令 事务 ...

  8. redis持久化到mysql的方案_纯干货|深度解析Redis持久化策略

    设为"星标",好文章不错过! 全是干货的技术号:本文已收录在github,欢迎 star/fork:https://github.com/Wasabi1234/Java-Inter ...

  9. 数据库—MySql—Redis—MongoDB—Http协同流程

    目录 MySql Mysql中char和varchar有什么区别? Mysql中float和double的区别是什么? Mysql中date和datetime类型的区别? Mysql中sql语句执⾏的 ...

最新文章

  1. PyTorch机器学习自动化:自动框架搜索、超参优化
  2. NLP领域“学霸”太多,一年前标准已过时,新跑分标准SuperGLUE出炉
  3. notepad++的NppFTP插件远程连接linux操作系统
  4. 存储变革 IBM V5000四大优势助用户破旧立新
  5. service 层 拼接的html 代码如何直接返回_代码分层的设计之道
  6. java hashmap实例_java HashMap详解及实例代码
  7. CSS光标cursor
  8. t3修改计算机后就无法登录了,电脑更换系统后,用友T3登录不上了,一直显示这个,怎么处理,这个怎么解决...
  9. 郫都区计算机老师周俊老师,教师节,带你走进郫都教师背后的故事
  10. Chrome 20对于HTML5最新支持的动态:颜色输入,网络信息API,CSS着色器
  11. ASP.NET Ajax 实现无刷新分页
  12. 现代操作系统 第一章 引论 习题
  13. 美股个股熔断机制[博]
  14. linux打印机无法识别usb设备,linux支持usb打印机,不用驱动
  15. 向日葵深度linux,完美使用向日葵远程软件
  16. 免费域名注册 freenom
  17. 魔窗研发副总裁沈哲:移动端SDK的优化之路
  18. AopAutoConfiguration matched: - @ConditionalOnProperty (spring.aop.auto=true) matched (OnPrope.
  19. 手机怎么使用涂鸦?分享几个手机视频怎么添加涂鸦的妙招
  20. 5G NR 网络切片是什么意思

热门文章

  1. 【java打地基】之——集合
  2. 几种常见算法的Python实现
  3. final与static
  4. win32汇编----挂机锁
  5. 优思学院|如何应用六西格玛的DMAIC做好采购管理?
  6. javaweb新闻发布系统源码
  7. 基于java springboot新闻发布微信小程序源码(毕设)
  8. 数项级数1——级数的收敛性
  9. QVGA HVGA WVGA
  10. 小程序 wepy 用户取消授权以及取消获取地理位置后的处理方法