Redis-持久化

因为Redis是内存操作,意味着掉电就GG, 所以为了保证异常重启等问题后能尽快恢复服务,还是需要一定的持久化机制来保证。Redis提供了两种持久化机制:

  • AOF Append Only File
  • RDS Redis Database

AOF

AOF文件记录的命令本身,是写完内存之后再写AOF缓冲区。

  • Always 每次
  • EverySec 每秒
  • No 操作系统自己决定
    当然了,频次越高,数据越可靠(越不容易丢失)但对性能的影响越大,这其中的trade-off需要根据业务场景具体考虑。

为了避免AOF文件过大,Redis会进行AOF重写(因为AOF是记录的命令本身,比如三个set a xxx的命令重写过后就只剩最后一个set命令会减少存储量)。如何确定AOF是否太大,有两个参数控制, auto-aof-rewrite-min-size默认64MB, 和 auto-aof-rewrite-percentage即上一次重写后体量的差值。

对AOF的重写是 后台线程进行的,当AOF大小超过设定值时,主线程会fork出一个子线程 bgrewriteof,(注:fork的过程其实是会阻塞主线程的),然后子线程对AOF进行重写,当新的客户端请求到来时,需要既写新的AOF又写原来的AOF。

RDB

RDB文件保存的是内存快照,也就是实际的内存数据。生成RDB的方式有两种

  • save命令,主线程执行
  • bgsave 子线程执行,也是Redis默认的配置

快照,就有一个问题,比如我想保存t0时刻的内存快照,我整个保存过程需要5s,如果这5s中,没有任何改变内存数据的客户端请求,那没问题。但是如果有,那如果没有其他机制保证,我的内存快照其实是掺杂了t1,t2等5s内修改了数据的结果。
解决办法也很简单,就像其他数据库一样,我有多个数据”版本”就行了呀,我t1改的数据a,改成a1,两个我都存着。Redis采用的就是操作系统提供的 Copy-on-write机制,究其本质就是有多个版本啦。

混合使用AOF,RDB

Redis4.0提出混合使用AOF,RDB来取得性能和可靠性的折中。即两次生成RDB的期间用AOF日志记录这其中的操作。

Original: https://www.cnblogs.com/rachel-aoao/p/redis_persistence.html
Author: rachel_aoao
Title: Redis-持久化

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/601466/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 加班整理出来的MySQL数据库基本操作送给大家,非常详细!

    哈喽兄弟们,中秋闲着没事,整理了一些数据库的基本操作,分享给大家,希望对大家有所帮助~ ; 一、SQL语句 (mysql 数据库中的语言) show databases;查看数据库…

    数据库 2023年6月14日
    086
  • MySQL之group by分组查询

    有如下数据: 一个简单的分组查询案例 [En] A simple case of grouping query 按照部门编号deptno分组,统计每个部门的平均工资。 select…

    数据库 2023年5月24日
    097
  • 携程二面:讲讲 MySQL 中的 WAL 策略和 CheckPoint 技术

    前段时间我在准备暑期实习嘛,这是当时面携程的时候二面的一道问题,我一脸懵逼,赶紧道歉,不好意思不知道没了解过,面试官又解释说 redo log,我寻思着 redo log 我知道啊…

    数据库 2023年6月6日
    0249
  • Java面向对象(下)作业

    首先我把题目先列到这里,可以仔细看一下题。 (1)设计一个名为Geometric的几何图形的抽象类,该类包括: ①两个名为color、filled属性分别表示图形颜色和是否填充。 …

    数据库 2023年6月11日
    0131
  • RabbitMQ

    安装Rabbitmq 1.由于需要erlang语言的支持,在安装rabbitMq之前需要安装erlang sudo apt-get install erlang-nox 2.安装r…

    数据库 2023年6月9日
    073
  • 如何使用Intellij IDEA工具导入SVN项目

    步骤一:选择VCS 打开Intellij IDEA开发工具,在导航栏中选择 VCS栏位,如图。 步骤二:创建SVN地址 执行步骤二,可以看见打开了一个SVN Repositorie…

    数据库 2023年6月6日
    078
  • 一文说透 MySQL JSON 数据类型(收藏)

    JSON 数据类型是 MySQL 5.7.8 开始支持的。在此之前,只能通过字符类型(CHAR,VARCHAR 或 TEXT )来保存 JSON 文档。 相对字符类型,原生的 JS…

    数据库 2023年5月24日
    067
  • 计算机网络基础

    计算机网络基础 计算机网络的定义和功能 计算机网络是利用通信设备和线路,将分布在地理位置不同的、功能独立的多个计算机系统连接起来,以功能完善的网络软件(网络通信协议及网络操作系统等…

    数据库 2023年6月16日
    070
  • java XML标记语言

    可扩展标记语言( Extensive Markup Language),标签中的元素名是可以自己随意写,可拓展是相对于html来说 标记语言:由一对尖括号括起来 用来当做配置文件 …

    数据库 2023年6月16日
    071
  • Asp.Net Core 发布和部署( MacOS + Linux + Nginx )

    在上篇文章中,主要介绍了 Dotnet Core Run 命令,这篇文章主要是讲解如何在Linux中,对 Asp.Net Core 的程序进行发布和部署。 有关如何在 Jexus …

    数据库 2023年6月11日
    097
  • LeetCode 21. 合并两个有序链表

    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,…

    数据库 2023年6月11日
    095
  • javaweb之HttpSession对象

    1.session会话追踪原理 客户端第一次请求服务端,服务端会创建一个session对象并且存储下来,之后会将session的唯一标识sessionId设置到响应头中传给客户端 …

    数据库 2023年6月16日
    072
  • C++学习笔记(5)–STL

    void test03() { for (size_t i = 0; i < 100; ++i, cout << i << " "…

    数据库 2023年6月14日
    091
  • 不可不知的 MySQL 升级利器及 5.7 升级到 8.0 的注意事项

    数据库升级是一项苦乐参半的工程。好消息是,通过升级,你可以享受到新版本带来的新功能和性能提升。令人担忧的是,新版本可能与旧版本不兼容,这主要体现在以下三个方面: [En] Data…

    数据库 2023年5月24日
    063
  • mysql使用存储过程批量给表加字段

    背景:在一个项目中,您需要将相同的字段添加到数百个表中,这很难手动添加,因此您计划使用存储过程来实现。 [En] Background: in a project, you nee…

    数据库 2023年5月24日
    0107
  • Stripe支付介绍在asp.net mvc中开发对接,图文加代码说明

    最近一个国外的电商项目,需要对接支付功能,国内的支付一般使用微信支付、支付宝、银联等等,但国际上一般使用Paypal、Skrill、BrainTree、Stripe等,经过内部综合…

    数据库 2023年6月14日
    094
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球