Redis提供了为持久化提供了两种方法:第一种是快照:他可以将存在某一时刻的所有数据都写入硬盘里面。第二种是只追加文件(AOF):它会在执行命令时,将被执行的写命令复制到硬盘里面。

  Redis支持持久化可以在redis.conf文件中配置,具体参数如下:

 # 快照的设置参数
save 900 1 # 表示从最近一次创建快照开始算起,当900秒之内有1此写入这个条件被满足时,Redis将会自动执行BGSAVE命令。如果设置了多个save 参数,其中任意一个满足都会触发执行。
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes # 写入的数据是否压缩
7
rdbchecksum yes
dbfilename dump.rdb # 快照写入的文件名,可以自定义名称。 # 快照文件和AOF文件指定的存储位置, 可以自定义路径。
dir /var/lib/redis
# AOF的设置参数
appendonly yes # 打开AOF。
appendfilename "appendonly.aof" # 写入的文件名称。
appendfsync everysec # 写入的频率: everysec(每秒执行一次写入)、always(执行一个命令写入一个到硬盘)、no(让操作系统来决定何时写入)
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100 # 当AOF文件大于64MB并且比上一次重写之后的体积大了一倍时,将会自动执行BGWRITEAOF命令。
 auto-aof-rewrite-min-size 64mb    # 当AOF文件大于64MB并且比上一次重写之后的体积大了一倍时,将会自动执行BGWRITEAOF命令。  aof-load-truncated yes

一、快照持久化:通过创建快照来获取存储的内存里面的数据在某个时间点上的副本。如果某一个时刻Redis系统崩溃,重新启动后将从快照文件中获取到的是最近一次写入成功的文本,而这之后到崩溃时的数据将被丢失。

  创建方法:1、通过客户端向redis服务器发送BGSAVE命令开始执行写入。(此时会fork一个子进程,然后子进程负责将快照写入硬盘,父进程则继续执行命令)

       2、通过客户端向redis服务器发送SAVE命令开始执行写入。(此时不会创建一个子进程,而是直接在父进程执行快照的写入,但是此时父进程将会阻塞命令的执行)(当服务器收到shutdown命令时也会执行SAVE命令来保存快照)

  大数据情况:当Redis中存储的数据量只有几个GB时,使用BGSAVE保存不会出现明显的时间延迟,但是当存储的数据量有十几个GB时,并且剩余的空闲内存不多时,这时执行BGSAVE会导致系统长时间的停顿。

    解决办法:我们可以考虑关闭自动保存功能,通过手动执行BGSAVE或SAVE来进行持久化。其中手动执行BGSAVE一样会导致停顿,但是可以选择停顿出现的时间段。手动执行SAVE虽然会导致无法执行命令,但是我们由于不会创建子进程争夺资源,速度也会比BGSAVE快,同样也可以选择停顿的时间段。

二、AOF持久化:会将被执行的写命令写道AOF未见的尾部,由此来记录数据发生的变化。因此Redis只要将AOF文件中的命令从头到尾执行一遍,就可以恢复之前的数据集。

  写入频率everysec(每秒执行一次写入):最佳的频率,即使遇到Redis崩溃,丢失的也只是一秒内的数据。always(执行一个命令写入一个到硬盘):这种写入模式在遇到Redis崩溃时,丢失的数据最少,但是会严重影响Redis的性能。no(让操作系统来决定何时写入):Redis将不会对AOF文件执行任何显示的同步操作,而是由操作系统决定应该何时对AOF文件执行同步,但是这个情况会导致Redis遇到崩溃时丢失不定量的数据,极不稳定。

  问题:当Redis不断的运行过程中,AOF不会断的增大。为了解决这个问题,我们可以向Redis服务器发送BGREWRITEAOF命令,她会通过这个命令移除AOF文件中的冗余命令来重写AOF文件,使其体积变小。其工作原理和BGSAVE非常相似,创建一个子进程来实现清除AOF中冗余的信息。

三、操作:

  使用redis模块连接redis服务器,然后设置一百万个键值对。

 import redis

 r = redis.Redis(host='localhost', port=6379, db = 0)

 for i in range(0, 1000000):
r.set(i, 'test_%s' %i)
print('ok')

  然后执行bgsave命令

  

  通过配置文件中文件存储位置查找文件到快照文件

  尝试打开看一下dump.rdb文件的位置:(经过压缩处理之后文件的数据) 

【Redis】持久化的更多相关文章

  1. redis持久化RDB和AOF

    Redis 持久化: 提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AO ...

  2. Redis持久化

    Redis持久化 快照(默认) 将内存中的数据以快照的方式写入到二进制文件中,默认文件名是dump.rdb. 配置自动化做快照持久化(如redis在n秒内如果超过m个key被修改就自动做快照) sav ...

  3. redis——持久化篇

    众所周知,redis是内存数据库,它把数据存储在内存中,这样在加快读取速度的同时也对数据安全性产生了新的问题,即当redis所在服务器发生宕机后,redis数据库里的所有数据将会全部丢失. 为了解决这 ...

  4. redis持久化机制

    redis持久化 redis的数据存在内存中,所以存取性能好.但是存在内存中的数据存在一个问题,一旦机器重启,内存数据消失.为了解决这个问题,redis支持持久化.持久化就是为了解决内存数据丢失时恢复 ...

  5. Redis-cluster集群【第二篇】:redis持久化

    Redis持久化原理: Redis支持两种持久化:RDB和AOF模式 一.名词解释: RDB:持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot).AOF ...

  6. Redis持久化实践及灾难恢复模拟

    参考资料: Redis Persistence http://redis.io/topics/persistence Google Groups https://groups.google.com/f ...

  7. Redis持久化-数据丢失及解决(转载)

    本文转载自        Redis持久化-数据丢失及解决  感谢原作者 Redis的数据回写机制 Redis的数据回写机制分同步和异步两种, 同步回写即SAVE命令,主进程直接向磁盘回写数据.在数据 ...

  8. Redis持久化-数据丢失及解决

    Redis的数据回写机制 Redis的数据回写机制分同步和异步两种, 同步回写即SAVE命令,主进程直接向磁盘回写数据.在数据大的情况下会导致系统假死很长时间,所以一般不是推荐的. 异步回写即BGSA ...

  9. 关于Redis持久化

    Redis有两种持久化的方式:快照(RDB文件)和追加式文件(AOF文件) RDB持久化方式是在一个特定的间隔保存某个时间点的一个数据快照. AOF(Append only file)持久化方式则会记 ...

  10. 解密Redis持久化

    原文 http://blog.nosqlfan.com/html/3813.html 本文内容来源于Redis作者博文,Redis作者说,他看到的所有针对Redis的讨论中,对Redis持久化的误解是 ...

随机推荐

  1. javaWeb的基础知识

    在服务器中,端口号是比较重要的,要学会查看和修改.win7有cmd和任务管理器两种方法.同时区分include动作和指令. <%@ include file="url"> ...

  2. CH 1201 - 最大子序和 - [单调队列]

    题目链接:传送门 描述输入一个长度为n的整数序列,从中找出一段不超过m的连续子序列,使得整个序列的和最大. 例如 $1,-3,5,1,-2,3$. 当 $m=4$ 时,$S=5+1-2+3=7$:当 ...

  3. cinder 和 qt5 vs2015结合

    下载编译好的cinder_0.9.1_vc2013, 用vs2015打开 cinder_0.9.1_vc2013\proj\vc2013\cinder.sln 重新编译 由于我用的qt也是vs2015 ...

  4. extundelete fuser

    [extundelete ] fuser -mv /dev/sda6 https://blog.csdn.net/xwl145/article/details/38896699 多列排序[sort]h ...

  5. take a cpu core offline

    [root@vrouter1 ~]# cat /sys/devices/system/cpu/online -,,- [root@vrouter1 ~]# cat /sys/devices/syste ...

  6. [security][modsecurity] modsecurity 规则说明/中文/转发

    原文转发以防丢失. 地址: http://www.catssec.com:8090/exploit/?p=691 转来细读之后,并没有太多的参考价值  :( modsecurity规则手册 通用格式 ...

  7. js中的事件轮询(event loop)机制

    异步任务指的是,不进入主线程.而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行. ...

  8. 《Redis 主从复制》

    万念俱灰,说的就是我现在的心情...... 周六下午写了一下午的读书笔记,由于我的 MAC 有点问题,重启了一下...... 灰飞烟灭...... 读 第八章<集群> 总结 1:如何开启主 ...

  9. java之map的基本介绍

    map简介 在讲解Map排序之前,我们先来稍微了解下map.map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等.其中这四者 ...

  10. 20165336 2016-2017-2 《Java程序设计》第9周学习总结

    20165336 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 1.URL类:URL类是java.net包中的一个重要的类,使用URL创建对象的应用程序称作 ...