返回首页

redis的数据恢复(redis持久化方式区别?)

来源:www.xuniwu.cn   时间:2023-04-18 01:06   点击:58  编辑:admin   手机版

一、redis持久化方式区别?

Redis运行时数据保存在内存中,那么重启了服务器数据丢失了怎么办,自然也提供持久化的设置。

redis支持两种持久化方式,RDB和aof模式。

RDB方式是定时将内存中的数据dump到磁盘中。实现是定时fork个子进程,将内存数据写入文件中,再替换上次生成的文件,这个过程如果服务器出现异常宕机,那么会导致数据丢失。RDB模式一个文件保存redis所有数据,在做数据恢复时就很方便。对某个时间节点做数据备份的场景也十分方便。

AOF则是记录事务操作日志,追加写入到文件中。aof支持三种策略记录操作日志。

1.每修改同步,即每次事务操作都立即记录。

2.每秒同步,每秒钟异步记录。

3.不同步,即不记录。

每秒同步跟RDB一样存在数据丢失的风险。对于大数据量的数据恢复上RDB会比AOF效率高。

二、redis持久化?

Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务 器。

Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。

由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁 盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时 dump到磁盘上的RDB持久化),另外一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)。

三、怎么实现redis的数据库的缓存?

大致为两种措施:

一、脚本同步:1、自己写脚本将数据库数据写入到redis/memcached。2、这就涉及到实时数据变更的问题(mysql row binlog的实时分析),binlog增量订阅Alibaba 的canal ,以及缓存层数据 丢失/失效 后的数据同步恢复问题。

二、业务层实现:1、先读取nosql缓存层,没有数据再读取mysql层,并写入数据到nosql。2、nosql层做好多节点分布式(一致性hash),以及节点失效后替代方案(多层hash寻找相邻替代节点),和数据震荡恢复了。

redis实现数据库缓存的分析:

对于变化频率非常快的数据来说,如果还选择传统的静态缓存方式(Memocached、File System等)展示数据,可能在缓存的存取上会有很大的开销,并不能很好的满足需要,而Redis这样基于内存的NoSQL数据库,就非常适合担任实时数据的容器。

但是往往又有数据可靠性的需求,采用MySQL作为数据存储,不会因为内存问题而引起数据丢失,同时也可以利用关系数据库的特性实现很多功能。所以就会很自然的想到是否可以采用MySQL作为数据存储引擎,Redis则作为Cache。

MySQL到Redis数据复制方案,无论MySQL还是Redis,自身都带有数据同步的机制,比较常用的MySQL的Master/Slave模式,就是由Slave端分析Master的binlog来实现的,这样的数据复制其实还是一个异步过程,只不过当服务器都在同一内网时,异步的延迟几乎可以忽略。那么理论上也可用同样方式,分析MySQL的binlog文件并将数据插入Redis。

因此这里选择了一种开发成本更加低廉的方式,借用已经比较成熟的MySQL UDF,将MySQL数据首先放入Gearman中,然后通过一个自己编写的PHP Gearman Worker,将数据同步到Redis。比分析binlog的方式增加了不少流程,但是实现成本更低,更容易操作。

顶一下
(0)
0%
踩一下
(0)
0%