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. mysql的常用函数
  2. passwd文件详解
  3. Eclipse启动时报错
  4. RPM包管理命令rpm
  5. excel 插入图片 NPOI
  6. Delphi的“动态窗体”技术实际应用[网络摘抄]
  7. Scala入门到精通——第三节 Array、List
  8. virus.win32.xorer病毒
  9. c++指定在某一线程运行_iPhone11升级iOS14运行速度测试:结果有点小惊喜
  10. 学会python可以上天!20行代码获取斗鱼平台房间数据,就是这么牛逼!
  11. ubuntu16 install sogou input
  12. matlab求一元函数极值点和拐点,matlab求函数的极值点和拐点函数y=x^2*sin(x^2-爱问知识人...
  13. uniapp,vue学习笔记
  14. 成田机场坐access到品川_下了飞机看不懂日语?这篇干货告诉你从羽田/成田机场到东京市区怎样方便又省钱!...
  15. “职”等你来!阿里云2020年专场招聘来了
  16. 负载大逃亡:四十二路怪兽联军及七条逃生法则(很喜欢)
  17. 如何将阿里云旧服务器上的数据转移到新服务器上
  18. 解决edge浏览器无法打开pdf文件问题
  19. 当心PayPal,Amazon认真对待付款
  20. Python Selenium.WebDriver 最强详解页面加载策略

热门文章

  1. [Learn Note] MSBuild
  2. css(小程序)强制不换行
  3. 监控网络状态的好工具- Smokeping
  4. 100-2000元价位几款适合新手入门的吉他推荐,2022年超全面初学者吉他选购攻略防雷不踩坑!
  5. AI创想秀,体验华为云ModelArts平台声音分类
  6. 最新s1 ROM下载汇总
  7. RGB与YUV转换以及存储格式(YIQ)(信号扫描线)(内插补点算法)(紧缩格式(packed formats))(平面格式(planar formats))
  8. 苹果霸屏热搜!M2芯片新笔记本9499元起,iPhone锁屏终于可以自定义,还秀出智能车机天花板丨WWDC 2022...
  9. c语言指针数组 难点总结,C语言指针与数组的难点分析.pdf
  10. 自从学会了Python,我实现了壁纸自由(6)