持久化redis
redis持久化
Redis持久化原理:
Redis支持两种持久化:RDB和AOF模式
一、名词解释:
RDB:持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。
AOF:持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。
AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite)
使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。
PDB和AOF的优先级:
如果同时开启RDB和AOF模式,AOF的优先级要比RDB高:
Redis 还可以同时使用 AOF 持久化和 RDB 持久化。 在这种情况下, 当 Redis 重启时, 它会优先使用 AOF 文件来还原数据集。
因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。
AOF 的方式有点像ORCAL的逻辑备库!
AOF redis 还会在后台对数据进行重写,比如set key1 , set key2 ,其实set key1 没用,这样就可以把set key1 删掉了。这样保存下来的数据集就很小了可以压缩了!
你甚至可以关闭持久化功能,让数据只在服务器运行时存在。
二、RDB&AOF优缺点
RDB的优缺点:
优点:
1、紧凑易于备份,他就一个文件。
2、RDB可以最大化redis性能、父进程无需做任何操作只需要for一个子进程即可
3、恢复比AOF块
缺点:
1、数据完整性:如果非常注重数据的完整性,那么RDB就不行,虽然他是一个point-in-time 的快照方式,但是在快照的过程中,redis重启了,那么在快照中的这些数据将会丢失
2、数据非常庞大后,非常耗CPU和时间,那么redis讲可能down掉1秒钟设置更长。
AOF的优缺点:
优点:
1、 使用 AOF 持久化会让 Redis 变得非常耐久,AOF默认的每一秒追加一次也可以修改他的方式没执行一次命令追加一次,所以你最多丢失1秒钟的数据
2、 AOF 文件是一个只进行追加操作的日志文件(append only log)
3、 Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写
缺点:
1、对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积。
2、 根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB
Rdis持久化设置:
默认Redis是开启的RDB模式的持久化的看下面配置文件:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
vim /etc/redis/6379.conf=============================================================################################ SNAPSHOTTING ################################## Save the DB on disk:## save <seconds> <changes>## Will save the DB if both the given number of seconds and the given# number of write operations against the DB occurred.## In the example below the behaviour will be to save:# after 900 sec (15 min) if at least 1 key changed# after 300 sec (5 min) if at least 10 keys changed# after 60 sec if at least 10000 keys changed## Note: you can disable saving completely by commenting out all "save" lines.## It is also possible to remove all the previously configured save# points by adding a save directive with a single empty string argument# like in the following example:## save ""save 900 1save 300 10save 60 10000================================================================上面3个save 是或的关系# save <seconds> <changes> ###格式!解释:# after 900 sec (15 min) if at least 1 key changed# after 300 sec (5 min) if at least 10 keys changed# after 60 sec if at least 10000 keys changed900 sec内有1个key发生了改变就做一次快照 或 300sec 内有10个keys发生了改变做一次快照 或60 sec内 10000 keys发生了改变做一次快照快照原理:forker出一个进程,是当前进程的一个副本相当于子进程,不会影响你当前运行的进程。当子进程写的时候会有一个临时的文件,当子进程写完之后会把这个临时的文件move替换老的文件,所以这个rdb的文件任何时间都是一个完整的可用的副本!你写的时候不会影响RDB这个文件,因为forker出的子进程正在写的是一个临时文件!但是如果如果故障了,你这个保存的时间是你开始快照那一刻那个时间,你快照到快照完毕那一段时间的数据就丢失了!如果想禁用持久化把这三行删了就行了save 900 1save 300 10save 60 10000 |
1、快照保存在那里呢?
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# The filename where to dump the DBdbfilename dump.rdb #如果你启用了多个快照名称,可以使用端口好来定义比如:dump_6379.rdb# Note that you must specify a directory here, not a file name.dir ./ #不仅仅是RDB模式下的DB存放在这个目录AOF模式下也是存放在这个目录的,建议存放在你指定的地方!比如:dir /opt/redis/比如我上面指定了:# The filename where to dump the DBdbfilename dump_6379.rdb# Note that you must specify a directory here, not a file name.dir /opt/redis/ |
2、手动在Redis中保存
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
127.0.0.1:6379> SET key 1OK127.0.0.1:6379> SAVEOK下目录下面有没有修改:-rw-r--r-- 1 root root 27 Oct 14 13:35 dump_6379.rdb 当前时间创建在设置个key看下:127.0.0.1:6379> SET key 2OK127.0.0.1:6379> SAVEOK-rw-r--r-- 1 root root 27 Oct 14 13:37 dump_6379.rdb127.0.0.1:6379> BGSAVEBackground saving startedSAVE和BGSAVE有什么区别:SAVE 是阻塞的当你直接执行SAVE的时候他就不干活了,BGSAVE是在后台执行。forker一个子进程来进行SAVE!SAVE的使用场景仅限于:当Redis需要迁移的时候,Redis没有数据写入并且可以停的时候使用!测试添加一个:key然后停掉看看!不保存:目前的key是:127.0.0.1:6379> KEYS *1) "key"2) "key2"3) "key3"127.0.0.1:6379> SET key4 4OK杀掉,重启之后发现设置的key丢失了。#所以当redis异常挂掉之后,没有SAVE收据! |
3、启用了AOF后
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
给这个文件追加,把所有的命令都写到一个文件里面,你执行一个我写一个。恢复的话在执行一遍不就行了吗!非常简单 (但是恢复相对RDB模式回慢他相当于重新把AOF库里的记录重新往内存中写一边)可以RDB和AOF同时使用!优点都占用了!但是也的根据业务来定!开启方法:修改配置文件appendonly yes #改为yesappendfilename "appendonly.aof" #文件名工作原理:forker 一个子进程写到临时文件,写完之后就给父进程发一个信号,开始写到写完的这个过程还会有子进程给父进程发信号。先保存在内存里但是他有个好的功能,重写,他会定时对aof进行重新,这样文件就会非常小!测试:(他会根据Redis可识别的方式写入文件,不过大概人也能看懂)16:50 [root@192.168.7.107]$ cat appendonly.aof*2$6SELECT$10*3$3SET$4kye1 |
持久化redis的更多相关文章
- [转帖]Redis持久化--Redis宕机或者出现意外删库导致数据丢失--解决方案
Redis持久化--Redis宕机或者出现意外删库导致数据丢失--解决方案 https://www.cnblogs.com/xlecho/p/11834011.html echo编辑整理,欢迎转载,转 ...
- Redis持久化--Redis宕机或者出现意外删库导致数据丢失--解决方案
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! Red ...
- redis持久化机制
redis持久化 redis的数据存在内存中,所以存取性能好.但是存在内存中的数据存在一个问题,一旦机器重启,内存数据消失.为了解决这个问题,redis支持持久化.持久化就是为了解决内存数据丢失时恢复 ...
- 6. redis持久化,认证
一. RDB 快照持久化 (默认) rdb机制,在满足redis.conf中配置的持久化策略后, 自动持久化数据, 默认存储在dump.rdb文件中 策略 : save 900 1 : 900秒内,一 ...
- redis 消息队列(发布订阅)、持久化(RDB、AOF)、集群(cluster)
一:订阅: 192.168.10.205:6379> SUBSCRIBE test Reading messages... (press Ctrl-C to quit) 1) "sub ...
- redis 持久化与备份策略 【转载】
本文转载自 http://blog.csdn.net/is_zhoufeng/article/details/10210353 持久化(persistence) 本文是 Redis 持久化文档 的中文 ...
- Redis持久化总结
Redis持久化总结 因为Redis是内存型数据库,所以为了防止因为系统崩溃等原因导致数据丢失的问题,Redis提供了两种不同的持久化方法来将数据存储在硬盘里面,一种方法是快照(RDB),它可以将存在 ...
- Redis 持久化和配置文件
Reids 持久化 Redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File). RDB,简而言之,就是在不同的时间点,将redis ...
- [Redis源码阅读]redis持久化
作为web开发的一员,相信大家的面试经历里少不了会遇到这个问题:redis是怎么做持久化的? 不急着给出答案,先停下来思考一下,然后再看看下面的介绍.希望看了这边文章后,你能够回答这个问题. 为什么需 ...
随机推荐
- 理解Javascript的动态语言特性
原文:理解Javascript的动态语言特性 理解Javascript的动态语言特性 Javascript是一种解释性语言,而并非编译性,它不能编译成二进制文件. 理解动态执行与闭包的概念 动态执行: ...
- Android多线程文件下载器
本应用实现的是输入文件的网络的地址,点击button開始下载,下载过程中有进度条和后面的文本提示进度, 下载过程中button不可点击,防止反复的下载,完成下载后会进行Toast的提示显示, 而且回复 ...
- maven仓库总结,maven私服搭建
配置pom.xml依赖包时在这里找包的描述: http://search.maven.org/#browse 以java为根目录. mvn archtype:generate -DgroupId=zt ...
- hdu1874畅通工程续 (dijkstra)
Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行 ...
- cocos2D-x 3.5 引擎解析之--引用计数(Ref),自己主动释放池(PoolManager),自己主动释放池管理器( AutoreleasePool)
#include <CCRef.h> Ref is used for reference count manangement. If a classinherits from Ref. C ...
- Linux内核——定时器和时间管理
定时器和时间管理 系统定时器是一种可编程硬件芯片.它能以固定频率产生中断.该中断就是所谓的定时器中断.它所相应的中断处理程序负责更新系统时间,还负责执行须要周期性执行的任务. 系统定时器和时钟中断处理 ...
- 在Eclipse在使用JUnit4单元测试(0基础知识)
自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我们在编写大型程序的时候,须要写成千上万个方法或函数.这些函数的功能可能非常强大,但我们在 ...
- WPF DataGrid_SelectChanged获取单元内容
private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { ...
- SQL Server中的查询
本博文简介一下SQL Server中经常使用的几类查询及相关使用的方法. 一.ExecuteScalar方法获取单一值 ExecuteScalar方法是SqlCom ...
- Bash ShellShock 解决办法
2014 年 9 月 24 日,Bash 惊爆严重安全漏洞,编号为 CVE-2014-6271,该漏洞将导致远程攻击者在受影响的系统上执行任意代码.GNU Bash 是一个为 GNU 计划编写的 Un ...