Redis学习笔记(一)-持久化
一、RDB持久方式
RDB持久化是把当前进程的数据已快照的形式保存到硬盘的过程。
触发方式:
1、手动触发命令:save和bgsave
save:阻塞式,内存较大的实例在执行过程中会造成长时间的阻塞,影响主进程上的正常服务请求。
bgsave:fork子进程,RDB持久化的过程在子进程中进行,完成后自动结束进程,并通知主进程。阻塞发生在fork阶段,时间较短。
2、自动触发:满足RDB持久化条件后会自动执行持久化过程。
- 相关配置:
################# SNAPSHOTTING ####################
# 触发自动保存条件 # save <seconds> <changes>
# save <秒> <修改次数>
# 900s有一次改变触发一次持久化
save 900 1
save 300 10
save 60 10000 # 设置保存快照失败时,是否停止redis命令写入
# 默认开启,拒绝所有写操作,保证内存和持久化数据一致
stop-writes-on-bgsave-error yes # 是否在导出.rdb文件时采用LZC压缩
rdbcompression yes #是都开启CRC64校验
rdbchecksum yes # 保存数据库的文件名称
dbfilename dump.rdb # 保存数据库的文件所在目录 dir ./
########################################
- 从节点执行全量复制操作。
- 执行debug reload命令。
- shutdown命令,若未开启aof自定执行bgsave
持久化失败的可能原因:fork子进程内存不足,或rdb所在文件夹没有写权限。
优缺点:
优点:
- 保存了某个时间点的数据,适合备份;
- 与AOF相比,恢复大数据集效率更高;
缺点:
- 非实时备份,redis宕机时会丢失部分数据;
- 数据大时,fork子进程比较耗时,会阻塞客户端响应;
- RDB文件需满足特定格式,兼容性差;
二、AOF持久化方式
AOF持久化是通过保存redis服务器执行的写命令来记录数据库状态。即当redis执行了写命令,该命令就会被追加到AOF文件末尾。
开启AOF持久化:
############################## APPEND ONLY MODE ###############################
# 开启aof,默认关闭 appendonly yes
# 保持的文件名
appendfilename "appendonly.aof" # 同步策略
# always 每次有新命令,就将缓冲区写入同步到AOF文件
# everysec(默认) 每秒写入并同步
# no 同步操作交给操作系统
appendfsync everysec # 重写时是否继续写AOF文件(开启IO性能会影响redis性能)
no-appendfsync-on-rewrite no # 是否忽略最后一条可能存在问题的命令(宕机会导致数据不完整)
aof-load-truncated yes
#################################################################################
执行流程:
1、命令追加到AOF缓冲区(减少硬盘IO开销);
2、缓冲区根据不同策略将数据同步到硬盘;
3、定期重写AOF文件,达到压缩目的;
AOF重写:
触发方式:
1、手动触发:执行bgrewriteaof命令。
2、自动触发:当配置的条件同时满足时,自动执行AOF重写。
# AOF文件当前大小/上次重写时大小,默认比值100,即当前大小是基准大小的2倍
auto-aof-rewrite-percentage 100 # AOF文件的最小体积,默认64MB
auto-aof-rewrite-min-size 64mb
执行流程:
- 主进程fork子进程执行rewrite,开销等同bgsave;
- fork子进程完成后,主进程继续响应其他命令,此时在保证原有AOF机制正确执行外,额外将新命令追加到一个重写缓冲区内(子进程只共享fork时的内存数据,新追加的数据临时保存在重写缓冲区)
- 子进程根据内存快照重写命令道新的AOF文件。
- 子进程重写结束后发送信号给主进程,主进程接收到信号更新统计信息,并将重写缓冲区内命令追加到新的AOF文件;
- 替换旧的AOF文件;
优缺点
优点:
- 支持秒级数据持久化;
- AOF文件可读性高,易于分析;
- 兼容性高,可用于不同版本redis;
缺点:
- 文件大,恢复速度慢。
- 对文件写数据频率较高,IO压力大
Redis学习笔记(一)-持久化的更多相关文章
- Redis学习笔记9--Redis持久化
redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化.redis支持四种持久化方式,一是 Snapshotting(快照)也是默认方式:二是Appen ...
- Redis学习笔记六:持久化实验(AOF,RDB)
作者:Grey 原文地址:Redis学习笔记六:持久化实验(AOF,RDB) Redis几种持久化方案介绍和对比 AOF方式:https://blog.csdn.net/ctwctw/article/ ...
- Redis学习笔记4-Redis配置详解
在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...
- Redis学习笔记之ABC
Redis学习笔记之ABC Redis命令速查 官方帮助文档 中文版本1 中文版本2(反应速度比较慢) 基本操作 字符串操作 set key value get key 哈希 HMSET user:1 ...
- Redis学习笔记(1)——Redis简介
一.Redis是什么? Remote Dictionary Server(Redis) 是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value ...
- redis学习笔记(3)
redis学习笔记第三部分 --redis持久化介绍,事务,主从复制 三,redis的持久化 RDB(Redis DataBase)AOF(Append Only File) RDB:在指定的时间间隔 ...
- Redis学习笔记(二) Redis 数据类型
Redis 支持五种数据类型:string(字符串).list(列表).hash(哈希).set(集合)和 zset(有序集合),接下来我们讲解分别讲解一下这五种类型的的使用. String(字符串) ...
- Redis学习笔记4-Redis配置具体解释
在Redis中直接启动redis-server服务时, 採用的是默认的配置文件.採用redis-server xxx.conf 这种方式能够依照指定的配置文件来执行Redis服务. 依照本Redi ...
- redis学习笔记(详细)——高级篇
redis学习笔记(详细)--初级篇 redis学习笔记(详细)--高级篇 redis配置文件介绍 linux环境下配置大于编程 redis 的配置文件位于 Redis 安装目录下,文件名为 redi ...
随机推荐
- [React Testing] Confidently Ship Production React Apps
We want to make sure that when we ship new code, our users can use the application. The best way we' ...
- hdu5119 Happy Matt Friends(dp)
题目链接:点击打开链接 题目描写叙述:给出n个数.求从这n个数中随意取出一些数(至少取一个)相互异或之后大于m的方案数? 解题思路:分析因为n<=40&&m<=10^6,因 ...
- Spring学习笔记——Spring事务仅仅对执行时异常回滚
我们在使用Spring时候一般都知道事务在遇到异常的时候会回滚.岂不知Spring的事务默认仅仅有在发生执行时异常即:RunTimeException时才会发生事务,假设一个方法抛出Exception ...
- 源码中修改Android的开机画面和动画【转】
本文转载自:http://blog.csdn.net/dddxxxx/article/details/54343976 参照文章:http://blog.csdn.net/a345017062/art ...
- Hamming Distance(随机算法)
http://acm.hdu.edu.cn/showproblem.php?pid=4712 题意:计算任意两个十六进制的数异或后1的最少个数. 思路:用随机数随机产生两个数作为下标,记录这两个数异或 ...
- 【BZOJ4555】【TJOI2016】【HEOI2016】求和
题目 传送门 解法 我们可以用容斥来求第二类斯特林数 我们知道, 第二类斯特林数\(S(n, k)\)是\(n\)个元素放进\(k\)个无标号的盒子里, 不可以含有空的. 于是我们可以考虑可以含有空的 ...
- BZOJ 1303
思路: 水题 竟然不会做 尴尬 比b大的数=1 比b小的数=-1 找到b 统计一下左边比b大x的数有多少 扫右边的时候就查左边的表 就可以了 //By SiriusRen #include < ...
- .net core2.0 中使用aspectcore实现aop
一.新建一个web application项目 1.1.添加AspectCore.Extensions.DependencyInjection引用 二.实现AbstractInterceptorAtt ...
- 自学Python九 爬虫实战二(美图福利)
作为一个新世纪有思想有文化有道德时刻准备着的屌丝男青年,在现在这样一个社会中,心疼我大慢播抵制大百度的前提下,没事儿上上网逛逛YY看看斗鱼翻翻美女图片那是必不可少的,可是美图虽多翻页费劲!今天我们就搞 ...
- 【Linux】Ubuntu输入法不能开机自启的解决方法
操作系统:Ubuntu Kylin 16.10 自从操作系统安装了搜狗输入法以后,每次重启电脑都需要手动启动Fcitx,才能启动搜狗输入法.下面给大家介绍输入法开机自启的解决方法: 操作系统的用户家目 ...