Redis的持久化

Stella981
• 阅读 432

RDB模式

1、什么是RDB

每隔一段时间,把内存中的数据写入磁盘,恢复的时候,他会自动从工作区拿出来进行恢复

2、RDB的优劣势

优势

  • 每隔一段时间,全量备份

  • 备份简单,可以直接传输文到其他地方

  • 备份的过程中会fork一个新的进程来进行文件的存储

劣势

  • 发生故障时,会丢失上次备份到当前时间的数据

  • fork的进程会和父进程一摸一样,会导致内存随时膨胀两倍

手动备份RDB

手动触发有两个命令

  • save命令

在执行的时候会阻塞Redis的服务,直到RDB文件完成才会释放我们Redis进程恢复读写操作

  • bgsave命令

执行bgsave的时候会在后台fork一个进程进行RDB的生成,不影响主进程的业务操作

使用RDB恢复数据

只需要将dump.rdb移动到我们redis.conf配置的dir(dir ./)目录下,就会在Redis启动的时候自动加载数据到内存,但是Redis在加载RDB过程中是阻塞的,直到加载完毕才能恢复操作。获取目录位置:redis-cli> config get dir

AOF模式

RDB会丢失最后一次备份和系统宕机之间的数据,所以就需要增量备份的过程了,什么是Redis的增量备份,就是AOF,优点像MySQL的Binlog

AOF的特点

  • 以日志形式来记录用户的请求和写操作,读操作不会记录

  • 文件是追加的形式而不是修改的形式

  • redis的aof恢复其实就是从头到尾执行一遍

优势

  • AOF更加耐用,可以以秒为单位进行备份,如果发生问题,只丢失一秒的数据

  • 以log日志的方式进行存放和追加数据,如果磁盘已经很满了,会执行redis-check-aof工具

  • 当aof文件太大的时候,redis在后台会自动重写aof,相当于把redis的aof文件进行压缩

  • AOF日志包含所有写操作,便于redis的恢复

劣势

  • 相同的数据,AOF比RDB大

  • AOF比RDB同步慢

  • 一旦AOF文件出现问题,数据就会不完整

RDB还是AOF,使用那个呢

Redis在RDB和AOF同时开启的过程中,重启后会优先加载AOF文件

  • AOF文件在开启后就会自动创建一个空文件

  • 重启后Redis会优先加载AOF:默认是以秒为单位进行保存的,在逻辑上比RDB的数据完整

在redis客户端可以在线更改配置,当然持久化也不例外:

config get appendonly
config set appendonly yes

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Redis学习笔记(五)之持久化
RDB在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存中。Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了。再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这