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. SparkContext.union 与 RDD.union

    RDD.union,和SparkContext.union都可以将多个RDD聚合成一个UnionRDD. 但不同的是,RDD.union在每次操作时,会创建一个新的数据集合,生成新的RDD,新的RDD ...

  2. CodeForces - 754D

    All our characters have hobbies. The same is true for Fedor. He enjoys shopping in the neighboring s ...

  3. EXSI中Linux安装tools

    挂载 mount /dev/cdrom /mnt/ 进入挂载目录复制安装包 cp VMwareTools-10.2.1-8267844.tar.gz /tmp/ 解压安装 cd /tmp/ tar - ...

  4. hdu4300 Clairewd’s message【next数组应用】

    Clairewd’s message Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  5. 没有上司的舞会|codevs1380|luoguP1352|树形DP|Elena

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description Ural大学有N个职员,编号为1~N.他们有从属关系 ...

  6. 关于linux下安装并打开网易云音乐——v 1.0.0

    首先,在网易云音乐官网的下载页面下载linux版本网易云音乐安装包(.deb文件) 下载好之后,在下载文件夹中双击打开文件,等待安装完毕 安装完成之后,直接双击图标是打不开的 需要用管理员命令打开 c ...

  7. 国庆JAVA作业

    动手动脑1 运行enumtest.java程序我明白了JAVA中枚举类型,s和t不能引用同一个对象.不是原始对象,可以实现从字符串中的转换. 动手动脑2 原码就是符号位加上真值的绝对值, 即用第一位表 ...

  8. CMSampleBufferRef转换

    参考链接:https://blog.csdn.net/shenyi0106/article/details/47004039 https://blog.csdn.net/jeffasd/article ...

  9. day4:数据结构list

    1,一直输入用户名,输入Q退出,注意用户的输入别忘了加strip,和upper不区分大小写,list最后一位添加append li = [] while 1: name = input("& ...

  10. iPhone开发之使用NSUserDefaults存储数据

    NSUserDefaults是什么,有什么用处 对于应用来说,每个用户都有自己的独特偏好设置,而好的应用会让用户根据喜好选择合适的使用方式,把这些偏好记录在应用包的plist文件中,通过NSUserD ...