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. 2. Mysql数据库的入门知识

    2. Mysql数据库的入门知识 (1)打开Windows系统提供的服务查看相应的服务. (2)在Windows任务管理器的进程中查看 (3)使用命令行管理windows的Mysql数据库服务. Ne ...

  2. H - An Easy Problem?!

    来源 poj2826 It's raining outside. Farmer Johnson's bull Ben wants some rain to water his flowers. Ben ...

  3. How to view assertions in the Verdi waveform viewer

    In the Cadence Simvision waveform viewer, I can see every assertions listed as a hierarchical signal ...

  4. PAT甲级1139 First Contact

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805344776077312 题意: 有m对朋友关系,每个人用4为数 ...

  5. .NET Core错误:The specified framework 'Microsoft.NETCore.App', version '1.0.0-rc2-3002702' was not found.

    本地Dos命令行中,cd到你的项目目录下,生成, dotnet {U_Project_Name}.dll 发布 dotnet publish ,然后将发布的文件夹中的文件全部拷贝到服务器中,至此,问题 ...

  6. python web篇 Django centos 命令版

    新建立一个虚拟环境,与其他python 包隔开互不影响 首先新建立一个目录,命名为xx, python3 下操作 $:python -m venv ll_env 注意在有多个Python环境下,使用 ...

  7. day14: 生成器进阶

    1,复习,迭代器:双下方法很少直接调用,一般都是通过其他语法触发的:迭代器一定可迭代,可迭代的通过调用iter()方法皆可以得到一个迭代器. 迭代器很方便使用,所有的数据只可以取一次,节省内存空间.生 ...

  8. data-original

    <img class="lazy" style="display: inline;" alt="开光纯铜牛摆件" src=" ...

  9. grp/从Zipkin到Jaeger,Uber的分布式追踪之道tchannel--zipkin with mysql in docker-compose

    GRPC----http://www.cnblogs.com/ghj1976/p/4587736.html https://blog.csdn.net/fei33423/article/details ...

  10. iOS-原生纯代码约束总结(一)之 AutoresizingMask

    一,概述 iOS有两大自动布局利器:autoresizing 和 autolayout(autolayout是IOS6以后新增).autoresizing是UIView的属性,一直存在,使用也比较简单 ...