[转帖]Redis数据库的备份与恢复

redis,数据库,备份,恢复 · 浏览次数 : 0

小编点评

## Redis backup configuration **Key points:** * **Multiple save configurations:** * `save 900 1` - Save every 900 seconds, only when a key changes. * `save 300 10` - Save every 10 minutes, only when 10 keys change. * `save 60 10000` - Save every 10000 seconds, only when 10000 keys change. * `save 123 10000` - Save every 10000 seconds, regardless of the number of changes. * **AOF (Advanced Feature Operation):** * Redis has an `aof` (Advanced Object File) storage mode that can be enabled to provide a higher level of durability and performance. * `aof` takes priority over `snapshot` and will only be used if `aof` is enabled. * **Important notes:** * Use `bgsave` instead of `snapshot` for background storage to avoid blocking the main thread. * Configure the `save` settings in `redis.conf` based on your actual workload and storage requirements. * Stop Redis gracefully using `kill -9 pid` instead of using `kill -9 pid` as it might cause data loss. * Copy the current RBD file before enabling `aof` storage to avoid losing data during restarts. **Additional considerations:** * **Data storage location:** * Use `save 123 10000` to store the backup in a file named `dump.rdb` in the directory specified by `dir` in `redis.conf`. * Use `save 123 10000` with `aof` enabled. * **AOF priority:** * `snapshot` has lower priority than `aof`. * `aof` is preferred over `snapshot` during recovery.

正文

Redis备份


当程序有较多的任务在执行时,我们可以redis-cli模式下执行
bgsave,进入后台进行备份.

Snapshot
当然我们可以直接运行save命令.会写入dump.rdb文件。

配置说明:

save 900 1 #当900秒之后有一个key变化进行持久化保存
save 300 10 #当300秒之后有10个key变化进行持久化保存
save 60 10000 #60十秒之后有10000个key变化进行持久化保存
  • 1
  • 2
  • 3

这个配置得仔细思考一下:最先判断的、最难满足的是 save 60 10000.
当60秒有9999key改变 不满足第三个条件,如果没有再没有key的改变那么只能等到300秒时进行持久化存储. 也就意味着秒数与key的改变数需同时满足.

AOF
当开启AOF时,AOF的优先级要高于Snapshot因此需要注意一些事项.

注意事项

1.使用Snapshot存储数据时,使用bgsave命令执行后台存储,防止阻塞主线程的执行.
2.redis.conf文件当中的save配置要根据实际配置,避免影响性能或数据存储.
3.如需退出redis服务,强烈不建议使用kill -9 pid这样会导致数据的丢失,最好根据Linux信号源机制去结束进程.
4.当redis需要中途开启AOF存储方式时,在充redis服务之前一定要拷贝一份当前的rbd文件,因为重启后会优先读取.aof文件,当第二次重启时,会将aof文件的数据存储到dump.rdb文件当中,这就会造成数据的丢失.
5.针对4的进一步补充,如果说我们将现在的数据存储到aof文件当中,在开启AOF存储方式时,那么当前的数据也会被AOF读取.
那么再开启AOF之前一定要运行bgrewriteaof,这样先会生成一个aof文件.
6.请始终牢记AOF的优先级高于Snapshot的优先级

Redis恢复数据


恢复数据也很简单运行config get dir 获得文件的存储目录,将dump.rdb文件放入该目录下 启动redis会自动加载该文件的内容.

如果是开启了AOF也很简单,只需要将AOF文件放入到相应的redis启动指定的dir目录当中.

主从复制与备份

首先要说明一点
Redis的主从复制是建立在内存快照的持久化基础上的,只要有Slave就一定会有内存快照发生。
中从同步的过程:
第一次Slave向Master同步的实现是:
Slave向Master发出同步请求,Master先dump出rdb文件,然后将rdb文件全量传输给slave,然后Master把缓存的命令转发给Slave,初次同步完成。
第二次以及以后的同步实现是:
Master将变量的快照直接实时依次发送给各个Slave。但不管什么原因导致Slave和Master断开重连都会重复以上两个步骤的过程。

save操作是在主线程中保存快照的,由于redis是用一个主线程来处理所有 client的请求,这种方式会阻塞所有client请求。

摘自:http://www.cnblogs.com/zhoujinyi/archive/2013/05/26/3098508.html

文章知识点与官方知识档案匹配,可进一步学习相关知识

与[转帖]Redis数据库的备份与恢复相似的内容:

[转帖]Redis数据库的备份与恢复

Redis备份 当程序有较多的任务在执行时,我们可以redis-cli模式下执行 bgsave,进入后台进行备份. Snapshot 当然我们可以直接运行save命令.会写入dump.rdb文件。 配置说明: save 900 1 #当900秒之后有一个key变化进行持久化保存 save 300 1

[转帖]Redis持久化-RDB和AOF

持久化的功能: Redis是内存数据库, 数据都是存储在内存中, 为了避免进程退出导致数据的永久丢失, 需要定期将Redis中的数据以某种形式(数据或命令) 从内存保存到硬盘。 当下次Redis重启时, 利用持久化文件实现数据恢复。 除此之外, 为了进行灾难备份, 可以将持久化文件拷贝到一个远程位置

[转帖]KV数据库调研

https://zhuanlan.zhihu.com/p/499313638 Redis作为NoSQL领域的代表,拥有很高的读写性能,支持比较丰富的数据类型,但是Redis也存在一些缺陷。 l 内存数据库,容量有限,成本很高 l 主从复制模型,存在数据丢失的风险 l 自身备份代价很大 l 集群模式存

[转帖]Redis--COW(Copy On Write)

文章系转载,便于整理和归纳,原文地址:https://zhuanlan.zhihu.com/p/339437815 摘要 问题概述: 1、RDB的过程中是否会停止对外提供服务? 2、RDB的过程中数据修改了,备份的是修改前的还是修改后的? 3、RDB时是不是先把内容中的所有KV复制一份,保证数据不会

[转帖]Redis由浅入深深深深深剖析

https://juejin.cn/post/6844903943688945677 前言 常用的SQL数据库的数据都是存在磁盘中的,虽然在数据库底层也做了对应的缓存来减少数据库的IO压力,但由于数据库的缓存一般是针对查询的内容,而且粒度也比较小,一般只有表中的数据没有发生变动的时候,数据库的缓存才

[转帖]看看 Jmeter 是如何玩转 redis 数据库的

柠檬小欧 2021-08-31 20:06420 Jmeter 作为当前非常受欢迎的接口测试和性能测试的工具,在企业中得到非常广泛的使用,而 Redis 作为缓存数据库,也在企业中得到普遍使用,那如何使用 jmeter 来测试 Redis 数据库呢?今天我们就来讲一讲怎么使用 jmeter 来调用

[转帖]Redis学习五(Spring Cache For Redis).

https://www.cnblogs.com/jmcui/p/8410560.html 一、概述 缓存(Caching)可以存储经常会用到的信息,这样每次需要的时候,这些信息都是立即可用的。 常用的缓存数据库: Redis 使用内存存储(in-memory)的非关系数据库,字符串、列表、集合、散列

[转帖]Redis 禁用 危险命令

一、Redis 危险命令 keys * :虽然其模糊匹配功能使用非常方便也很强大,在小数据量情况下使用没什么问题,数据量大会导致 Redis 锁住及 CPU 飙升,在生产环境建议禁用或者重命名!flushdb :删除 Redis 中当前所在数据库中的所有记录,并且此命令从不会执行失败flushall

[转帖]Redis 内存优化在 vivo 的探索与实践

https://www.jianshu.com/p/0849b526f0f4 一、 背景 使用过 Redis 的同学应该都知道,它基于键值对(key-value)的内存数据库,所有数据存放在内存中,内存在 Redis 中扮演一个核心角色,所有的操作都是围绕它进行。 我们在实际维护过程中经常会被问到如

[转帖]Redis 最佳实践(上)

https://my.oschina.net/jiagoushi/blog/5601975 引言 尽管 redis 是一款非常优秀的 NoSQL 数据库,但更重要的是,作为使用者我们应该学会在不同的场景中如何更好的使用它,更大的发挥它的价值。主要可以从这四个方面进行优化:Redis 键值设计、批处理