持久化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是怎么做持久化的? 不急着给出答案,先停下来思考一下,然后再看看下面的介绍.希望看了这边文章后,你能够回答这个问题. 为什么需 ...
随机推荐
- SE 2014 年4月21日(一)
如图配置 网络中存在四个自治系统,设备之间要求建立BGP对等体关系,发布BGP路由,使得全网BGP路由相互通讯. 要求 1. 由于AS 200中的路由信息频繁抖动,所以AS 100 和 AS 300 ...
- 用Javascript评估用户输入密码的强度(Knockout版)
原文:用Javascript评估用户输入密码的强度(Knockout版) 早上看到博友6点多发的一篇关于密码强度的文章(连接),甚是感动(周末大早上还来发文). 我们来看看如果使用Knockout更简 ...
- js面向对象编程:命名空间
在其它语言中为了避免类和方法重名问题,都有一个类似命名空间的概念,在js中实现类似的功能吗? 能够实现,主要是借助于js中对象的概念来实现,比如: 1 在命名空间中定义方法属性 var GiantC ...
- (40)JS运动之右下角悬浮框
<!DOCTYPE HTML> <!-- --> <html> <head> <meta charset="utf-8"> ...
- Android基于cordova3.3插件开发
最近的工作项目,需要使用cordova插件开发,详细Cordova角色,不会走,你可以去百度自身OK该,直接启动.详细过程,我有一个小Demo解说提前进行. 还只是接触,东西太理论基础,我也不太清楚, ...
- 《循序渐进Oracle》部分笔记
1.不要用户名/密码 直接/as sysdba 是操作系统认证方式,改变安全方式 sqlnet.ora 里SQLNET.AUTHENTICATION_SERVICES=(NTS)表示启动操作系统认证; ...
- 《JavaScript设计模式与开发实践》读书笔记之模板方法模式
1. 模板方法模式 1.1 面向对象方式实现模板方法模式 以泡茶和泡咖啡为例,可以整理为下面四步 把水煮沸 用沸水冲泡饮料 把饮料倒进杯子 加调料 首先创建一个抽象父类来表示泡一杯饮料 var Bev ...
- ecshop首页调用指定分类的所有产品(指定一级调二级)
第一种方法 第一 在/includes/lib_goods.php下增加如下代码,用过网上的直接换掉就可以 function index_get_cat_id_goods_best_list($cat ...
- 探索Oracle数据库升级6 11.2.0.4.3 Upgrade12c(12.1.0.1)
探索Oracle数据库升级6 11.2.0.4.3 Upgrade12c(12.1.0.1) 一.前言: Oracle 12c公布距今已经一年有余了,其最大亮点是一个能够插拔的数据库(PD ...
- Windows Phone开发(38):动画之PointAnimation
原文:Windows Phone开发(38):动画之PointAnimation PointAnimation也是很简单的,与前面说到的两个Animation是差不多的,属性也是一样的,如By.Fro ...