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. 深入web开发之webserver/servlet容器

    可能按照书上的demo,自己就能做个小型网站,但是在并发下是什么情况呢?生成了多少对象?对象的关系又是什么?这些问题都要慢慢弄清楚. ------作为后端工程师,不仅要会增删改查,还要了解servle ...

  2. position 有五个值:static、relative、absolute、fixed、inherit。

    position 有五个值:static.relative.absolute.fixed.inherit. static 是默认值.就是按正常的布局流从上到下从左到右布局,平常我们做网页时,没有指定 ...

  3. CH6201 走廊泼水节【最小生成树】

    6201 走廊泼水节 0x60「图论」例题 描述 [简化版题意]给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树.求增加的边的权值总和最小是多少. 我 ...

  4. [No0000122]Donet 中间语言,反编译 .net IL 指令速查

    名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且 ...

  5. Java并发编程的4个同步辅助类(CountDownLatch、CyclicBarrier、Semphore、Phaser)

    我在<jdk1.5引入的concurrent包>中,曾经介绍过CountDownLatch.CyclicBarrier两个类,还给出了CountDownLatch的演示案例.这里再系统总结 ...

  6. SQL server 清除缓存

    在进行性能分析的时候有时候需要清除缓存以便进行下一次分析. SQL Server提供了一些工具来清除缓存的性能数据.使用下面的语句来完成这些任务. 清除全局缓存使用下面的语句: DBCC DROPCL ...

  7. 2017年蓝桥杯省赛A组c++第5题(递归算法填空)

    /* 由 A,B,C 这3个字母就可以组成许多串. 比如:"A","AB","ABC","ABA","AACB ...

  8. isinstance与type的区别

    1.isinstance()内置函数 python中的isinstance()函数是python的内置函数,用来判断一个函数是否是一个已知类型.类似type. 2.用法: isinstance(obj ...

  9. [knowledge][lisp] lisp与AI

    https://blog.youxu.info/2009/08/31/lisp-and-ai-1/ https://blog.youxu.info/2010/02/10/lisp-and-ai-2/

  10. 搭建Kubernetes服务集群遇到的问题

    kube-proxy问题: Apr 12 09:42:49 compute1 kube-proxy[12965]: E0412 09:42:49.602342 12965 reflector.go:2 ...