Redis持久化及其配置
引言
终于可以有时间继续看书,整理自己的见解, 写下2019年第一篇自己的随笔。从去年9月份跳槽到新公司后,几乎天天的加班让整个人都盲目了,原本计划好的事情总是会被打乱。都说坚持一件事情很难,特别是写博客。确实我由于自己的懒惰以及工作的事情,导致“放弃”了三个的月随笔博文习惯,希望2019年再接再厉吧;
由于Redis在公司的架构中使用很多,但是大部分人包括我也一开始只是停留在会部署的地步,并没有深入理解为什么那么部署,以及Redis的一些特性,今天参考了一些资料以后,做了关于Redis持久化的一个简单博文
一、什么是Redis持久化
简单来说,就是Redis通过将数据存储于内存或者虚拟内存(也是Redis常用的技术),通过某种技术手段将数据保存于可永久保存的存储设备或媒介中,以此来保证数据完整不丢失、高速访问数据、快速恢复。
二、Redis持久化的两种方式
Redis一般通过两种方式实现持久化:快照方式(RDB模式,默认方式),日志追加方式(AOF模式)
1. 快照方式(RDB方式)
这种方式有一下几个特点,显而易见RDB方式总结起来就是一种将数据以快照方式写入二进制文件中,在间隔时间内全量写入磁盘的一个过程。它的优缺点也在一下四个特点中体现,
缺点:第一是多少间隔时间的重要性,第二是数据量大的情况下,全量写入会影响性能
优点:对于恢复操作相对比较简单,因为全量写入只需要保证一个二进制文件的恢复即可;
(1) 将内存中数据以快照的方式写入二进制文件中,默认文件名为dump.rdb
(2) 客户端使用save/bgsave命令做一次快照持久化(save操作在主线程中保存快照,Redis是用一个主线程处理所有的客户端请求,所以可能会阻塞所有的客户端请求,不推荐使用);
(4) 快照方式并不是增量数据,而是全量重新写入,数据量大的情况下会严重影响性能(主要是由于大量IO操作以及主进程不断fork()子进程去处理持久化工作)。
(5) 快照方式是间隔时间做一次,所以如果redis意外宕机的话,就会丢失最后一次快照的后的所有数据。
2. 日志追加方式(AOF持久化)
Redis会将每一个收到的写命令都通过write函数追加到文件中(默认为appendonly.aof),当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
缺点:相比较RDB而已AOF的文件相对较大(redis当AOF文件比较大时,可以重写),AOF的速度比RDB相对较慢;
优点:采用everysec配置,那么顶多损失前一秒的数据;不会像RDB那样损失很多(当然只是相对而言);
AOF的文件没有被重写的话,比如当我们不小心FULASHALL,现在需要恢复。只需要AOF文件末尾中去掉该命令,重启Redis载入即可(即AOF文件比较容易读懂,恢复上一个状态简单)
(1) 由于OS会在内存中缓存write的修改,所以并不会立即写到磁盘上,这样可能会导致丢失部分修改,可以通过配置来实现强制OS写到磁盘时机。
a) appendonly yes //启用日志追加持久化方式
b) appendfsync always //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
c) appendfsync everysec //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐使用
d) #appendfsync no //完全依赖操作系统,性能最好,持久化没保证
(2)持久化的文件会越来越大,比如执行incr test命令100次,最后恢复使用set test 100就够了,但是这种方式保存了100条命令,其中99次是多余的;
(3) 为了(2)中提到的缺点,redis提供了bgrewriteaof命令:redis将内存中的数据以命令的方式保存到临时文件中,最后替换原来的持久化日志文件。
三、Redis持久化的配置
1. RDB默认方式配置:
# 时间策略:当满足每900s/300s/60s内至少1/10/10000次写操作,则会触发bgsave命令进行持久化,三个策略中只需要满足其中任何一条即可持久化
save 900 1
save 300 10
save 60 10000 # 文件名称
dbfilename dump.rdb # 文件保存路径
dir /home/redis/data/ # 如果持久化出错,主进程是否停止写入:是为了保证数据的一致性,工作进程(子进程)持久化出错后,主进程停止写入请求
stop-writes-on-bgsave-error yes # 是否压缩
rdbcompression yes # 导入时是否检查
rdbchecksum yes
2. AOF日志追加方式配置:
# 是否开启aof
appendonly yes # 文件名称
appendfilename "appendonly.aof" # 同步方式,上文已提到
appendfsync everysec # aof重写操作是否同步,yes则不进行同步,no则同步
no-appendfsync-on-rewrite no # 重写触发配置
auto-aof-rewrite-percentage 100 # 当前AOF文件大小是上次日志重写时的AOF文件大小两倍时,发生BGREWRITEAOF操作。
auto-aof-rewrite-min-size 64mb # 当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOF。 # 加载aof时如果有错如何处理,忽略最后一条可能存在问题的指令
aof-load-truncated yes
# Redis4.0新增RDB-AOF混合持久化格式。
aof-use-rdb-preamble no
Redis持久化及其配置的更多相关文章
- 缓存系列之四:redis持久化与redis主从复制
一:redis 虽然是一个内存级别的缓存程序,即redis 是使用内存进行数据的缓存的,但是其可以将内存的数据按照一定的策略保存到硬盘上,从而实现数据持久保存的目的,redis支持两种不同方式的数据持 ...
- redis持久化以及主从服务器的配置
作者:silenceper 日期:2013-10-03 原文地址:http://silenceper.com/archives/959.html redis 与memcached 最大的一个区别就是R ...
- 五、Redis持久化配置
转载:[https://www.cnblogs.com/xingzc/p/5988080.html] Redis提供的持久化机制(RDB和AOF) Redis提供的持久化机制 Redis是一种面向“k ...
- 配置方案:Redis持久化RDB和AOF
Redis持久化方案 Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘.当下次Redis重启时,利 ...
- redis之 Redis持久化配置
Redis持久化配置 Redis的持久化有2种方式 1快照 2是日志 Rdb快照的配置选项 save 900 1 // 900内,有1条写入,则产生快照 save 300 1000 ...
- Redis实战总结-配置、持久化、复制
Redis的配置主要放置在redis.conf,可以通过修改配置文件实现Redis许多特性,比如复制,持久化,集群等. redis.conf部分配置详解 # 启动redis,显示加载配置redis.c ...
- apscheduler(定时任务) 基于redis持久化配置操作
apscheduler(定时任务) 基于redis持久化配置操作 安装模块 pip install apscheduler 导入模块配置 ## 配置redis模块 from apscheduler.j ...
- Redis持久化 aof和rdb的原理配置
目录 一.介绍 二.RDB持久化(全量写入) rdb原理 rdb模式 rdb触发情况 rdb优势和劣势 rdb文件配置 rdb命令配置 rdb数据恢复 三.AOF持久化(增量写入) aof原理 aof ...
- redis 持久化策略、aof配置、测试、手动持久化、aof文件体积优化
redis持久化策略 1.数据文件.rdb 2.更新日志.aof 设置aof 1.命令方式config set appendonly noconfig rewrite2.配置文件方式 redis持久化 ...
随机推荐
- Exp4 恶意代码分析 20154320 李超
恶意代码 概述 恶意代码是指故意编制或设置的.对网络或系统会产生威胁或潜在威胁的计算机代码.最常见的恶意代码有计算机病毒(简称病毒).特洛伊木马(简称木马).计算机蠕虫(简称蠕虫).后门.逻辑炸弹等. ...
- 原生AJAX(包括Fetch)
一.INTRO AJAX即“Asynchronous Javascript And XML” 一.Ajax的原生初级 1.1 Ajax对象创建:var xhr= new XMLHttpRequest( ...
- vs编译器堆栈保护(GS选项)
参考: 安全编码实践一:GS编译选项和缓存溢出 堆栈溢出第三话--GS机制
- [深入学习Web安全](11)之XSS玩法
[深入学习Web安全](11)之XSS玩法 本文转自:i春秋社区 前言这篇paper,我们将学习如何优雅的调戏XSS.我们会教大家一些不常用的,但很实用的XSS姿势.我们在正式进入主题之前,先来说一下 ...
- Web前端JQuery面试题(二)
Web前端JQuery面试题(二) 1.请写出jquery的语法? <script type="text/javascript"> $(document).ready( ...
- H5中用js让页面全屏
概述 意外的发现一个网页有一个按钮能使网页全屏,查了下代码发现是H5的全屏api,于是就查了下资料,记录下来供以后开发时参考,相信对其他人也有用. 参考资料: 利用js如何做到让页面全屏和不全屏功能 ...
- java并发机制锁的类型和实现
synchronized 和 volatile,是最基础的两个锁! volatile是轻量级锁,它在多核处理器开发中保证了共享变量的可见性.即当一个线程修改一个共享变量时,其他线程能够读到这个修改的值 ...
- JavaScript 数组方法
数组方法: 1.Array.join([param]) 方法:将数组中所有的元素都转换为字符串并连接起来,通过字符 param 连接,默认使用逗号,返回最后生成的字符串 2.Array.reverse ...
- JDK下载API文档
JDK官方下载 JDK1.5 : http://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD ...
- Windows平台下kafka环境的搭建
近期在搞kafka,在Windows环境搭建的过程中遇到一些问题,把具体的流程几下来防止后面忘了. 准备工作: 1.安装jdk环境 http://www.oracle.com/technetwork/ ...