Redis持久化快照的方法与原理


Redis持久化快照的方法与原理

所谓的持久化就是保持我们的数据不丢失,将数据通常保存在我们的硬盘中。在Redis中持久化的方式有两种,一种是快照持久化,一种是AOF持久化,各有各的优缺点,在项目中我们得根据实际的情况来选择具体的持久化方式。

推荐:redis入门教程

快照持久化(RDB)

也叫RDB持久化方式,就是通过拍摄快照的方式实现持久化,将某个时间的内存数据存储在一个rdb文件中,在redis服务重新启动的时候加载文件中的数据

配置持久化快照

redis中的快照持久化默认是开启的,在redis.conf配置文件中有相关的配置选项

################################ SNAPSHOTTING  ################################
#
# S*e the DB on disk:
#
#   s*e <seconds> <changes>
#
#   Will s*e the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the beh*iour will be to s*e:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#
#   Note: you can disable s*ing completely by commenting out all "s*e" lines.
#
#   It is also possible to remove all the previously configured s*e
#   points by adding a s*e directive with a single empty string argument
#   like in the following example:
#
#   s*e ""

s*e 900 1   #900秒内至少有1个key被更改就执行快照
s*e 300 10  #300内描述至少有10个key被更改就执行快照
s*e 60 10000  #60秒内至少有10000个key被更改就执行快照

# By default Redis will stop accepting writes if RDB snapshots are enabled
# (at least one s*e point) and the latest background s*e failed.
# This will make the user aware (in a hard way) that data is not persisting
# on disk properly, otherwise chances are that no one will notice and some
# disaster will happen.
#
# If the background s*ing process will start working again Redis will
# automatically allow writes again.
#
# However if you h*e setup your proper monitoring of the Redis server
# and persistence, you may want to disable this feature so that Redis will
# continue to work as usual even if there are problems with disk,
# permissions, and so forth.
stop-writes-on-bgs*e-error yes #拍摄快照失败是否继续执行写命令

# Compress string objects using LZF when dump .rdb databases?
# For default that's set to 'yes' as it's almost always a win.
# If you want to s*e some CPU in the s*ing child set it to 'no' but
# the dataset will likely be bigger if you h*e compressible values or keys.
rdbcompression yes #是否对快照文件进行压缩

# Since version 5 of RDB a CRC64 checksum is placed at the end of the file.
# This makes the format more resistant to corruption but there is a performance
# hit to pay (around 10%) when s*ing and loading RDB files, so you can disable it
# for maximum performances.
#
# RDB files created with checksum disabled h*e a checksum of zero that will
# tell the loading code to skip the check.
rdbchecksum yes #是否进行数据校验

# The filename where to dump the DB
dbfilename dump.rdb #快照文件存储的名称
# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /opt/redis-5.0.3#快照文件存储的位置

1.jpg

验证效果

1、进入安装目录,如果有dump.db文件就删除

2、启动redis,然后添加几个数据,然后关闭redis退出

[root@root redis-5.0.3]# src/redis-cli 
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name aaa
OK
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> incr age
(integer) 19
127.0.0.1:6379> shutdown
not connected> exit

3、在我们的安装的目录下就生成一个dump.rdb文件,这个就是我们的快照备份文件

2.jpg

4、再次启动redis,进入发现原来的数据还在,这是因为redis启动的时候加载了备份文件中的数据。

[root@root redis-5.0.3]# src/redis-server redis.conf 
1211:C 13 Feb 2019 01:27:22.668 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1211:C 13 Feb 2019 01:27:22.668 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=1211, just started
1211:C 13 Feb 2019 01:27:22.668 # Configuration loaded
[root@root redis-5.0.3]# src/redis-cli 
127.0.0.1:6379> ping 
PONG
127.0.0.1:6379> get name
"aaa"
127.0.0.1:6379> get age
"19"
127.0.0.1:6379> keys *
1) "name"
2) "age"

5、关闭退出

关闭退出后删除dump.rdb文件,启动后发现数据没有了

[root@root redis-5.0.3]# src/redis-server redis.conf 
1218:C 13 Feb 2019 01:29:01.336 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1218:C 13 Feb 2019 01:29:01.336 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=1218, just started
1218:C 13 Feb 2019 01:29:01.336 # Configuration loaded
[root@root redis-5.0.3]# src/redis-cli 
127.0.0.1:6379> ping 
PONG
127.0.0.1:6379> keys *
(empty list or set)

快照持久化原理

s*e命令:

在redis运行中,我们可以显示的发送一条s*e命令来拍摄快照。s*e命令是阻塞命令,也就是当服务器接收了一条s*e命令之后就会开始拍摄快照,在此期间不会再去处理其他的请求,其他请求会被挂起直到备份结束

3.jpg

bgs*e命令

bgs*e命令也是立即拍摄快照,有别于s*e命令,bgs*e并不是一条阻塞命令,而是fork一个子线程,然后这个子线程负责备份操作。而父进程继续处理客户端的请求,这样就不会造成阻塞了。

127.0.0.1:6379> ping
PONG
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> bgs*e
Background s*ing started

4、shutdown命令

当我们只想shutdown命令的时候。服务器会自动发送一条s*e命令来完成快照操作。并在完成备份操作后关闭服务器。所以我们当我们的操作不满足前面三种情况的时候关闭服务器后,再次打开我们的数据也不会丢失。

5、sync命令

当在主从环境中,从节点要同步主节点的数据的时候会发送一条sync命令来开发一次复制。此时主节点会发送一条bgs*e命令来fork一个新的线程来完成快照并在bgs*e命令操作结束后将快照文件发送给从节点来完成主从节点的数据的同步。

优缺点

优点

RDB文件保存了某个时间点的redis数据,适合备份,你可以设定一个时间点对RDB文件进行归档,这样就能在需要的时候很轻易的把数据恢复到不同的版本。 RDB很适合用于灾备。单文件很方便就能传输到远程的服务器上。在数据量比较打的情况下,RDB启动速度快.

缺点

RDB容易造成数据丢失,如果设置3分钟保存一次,如果redis因为一些原因不能正常工作,那么从上次产生快照到Redis出现问题这段时间的数据就会丢失了。

如何禁用快照持久化

1、在redis.conf配置文件中注释掉所有的s*e配置 2.在最后一条s*e配置追加吃命令

s*e ""

AOF持久化

Trae国内版 Trae国内版

国内首款AI原生IDE,专为中国开发者打造

Trae国内版 2045 查看详情 Trae国内版

与快照持久化通过直接保存 Redis 的键值对数据不同,AOF 持久化是通过保存 Redis 执行的写命令来记录 Redis 的内存数据。理论上说,只要我们保存了所有可能修改 Redis 内存数据的命令(也就是写命令),那么根据这些保存的写命令,我们可以重新恢复 Redis 的内存状态。AOF 持久化正是利用这个原理来实现数据的持久化与数据的恢复的

开启AOF

在redis中aof默认是关闭的,我们需要修改配置文件开启aof

4.jpg

appendonly yes
appendfilename "appendonly.aof"
# If unsure, use "everysec".
# appendfsync always
appendfsync everysec
# appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

5.jpg

关闭快照持久化

s*e ""
#s*e 900 1
#s*e 300 10
#s*e 60 10000

验证,重启服务

执行简单的命令操作我们可以看到append.aof文件中存储的内容就是我们执行的命令

6.jpg

7.jpg

8.jpg

AOF持久化备份的注意点

1.appendfsync的取值有三个,分别是everysec,always和no,在这里我们推荐使用everysec,不推荐使用always。因为always会严重影响服务器的性能 2.everysec最坏的情况也就只会丢失1秒的数据,影响在可控范围之内。

优缺点

优点

AOF 持久化的方法提供了多种的同步频率,即使使用默认的同步频率每秒同步一次,Redis 最多也就丢失 1 秒的数据而已。 AOF 文件的格式可读性较强,这也为使用者提供了更灵活的处理方式。例如,如果我们不小心错用了 FLUSHALL 命令,在重写还没进行时,我们可以手工将最后的 FLUSHALL 命令去掉,然后再使用 AOF 来恢复数据。

缺点

虽然 AOF 提供了多种同步的频率,默认情况下,每秒同步一次的频率也具有较高的性能。但在 Redis 的负载较高时,RDB 比 AOF 具好更好的性能保证。 RDB 使用快照的形式来持久化整个 Redis 数据,而 AOF 只是将每次执行的命令追加到 AOF 文件中,因此从理论上说,RDB 比 AOF 方式更健壮

持久化的一些使用建议

1、如果redis仅仅是用来做为缓存服务器的话,我们可以不使用任何的持久化。 

2、一般情况下我们会将两种持久化的方式都开启。redis优先加载AOF文件来回复数据。RDB的好处是快速。 

3、在主从节点中,RDB作为我们的备份数据,只在salve(从节点)上启动,同步时间可以设置的长一点,只留(s*e 900 1)这条规则就可以了。

相关推荐:mysql视频教程:https://www.php.cn/course/list/51.html

以上就是Redis持久化快照的方法与原理的详细内容,更多请关注其它相关文章!


# 加载  # web的网站建设步骤  # seo粤语怎么打seo黑帽  # 网站建设情况调研报告  # SEM和SEO的概念  # 灵山荔枝的网络营销推广  # 网络教育档案网站建设题  # 宝坻区创新关键词排名要求  # 博兴建设局网站  # 养老院营销推广策略研究  # 齐齐哈尔港网站建设  # Redis  # 较高  # 并在  # 推荐使用  # 也就  # 配置文件  # 就会  # 来完成  # 国内  # 我们可以 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: Python中深度嵌套字典与列表的数据提取与条件过滤指南  外媒评《燕云十六声》DIY载具新玩法:很像《塞尔达传说王国之泪》!  从HTML表单获取逗号分隔值并转换为NumPy数组进行预测  嘀嗒顺风车如何开具电子发票  Eclipse开发J*a快速入门  秋风萧瑟洪波涌起中的萧瑟指的是什么  sublime text 4如何安装_最新版sublime下载与汉化教程  realme 10 Pro息屏方案_realme 10 Pro省电策略  顺丰速运官网查询入口 顺丰物流查询官网入口链接  win11关机几秒又自己开机 Win11关机自动重启问题修复  《豆瓣》私信用户方法  word表格如何按某一列内容进行排序_Word表格按列排序方法  如何在CSS中设置背景图像:一个全面指南  《波斯王子:失落的王冠》剑术大师打法攻略  花生壳内网映射新方案  Win11怎么录屏_Windows 11自带Xbox Game Bar录制视频  家里的小飞虫总是不断,用什么方法可以彻底根除?  sf漫画官网登录入口直达_sf漫画官方正版网址  抖音如何进行蓝V认证 抖音企业号申请所需资料与流程  支付宝如何解绑云闪付_支付宝与云闪付账户关联解除方法  《via浏览器》强制缩放网页设置方法  b站如何剪辑视频_b站必剪app使用教程  《画加》约稿流程  申通快递物流信息查询 申通快递包裹状态追踪  发博客与长微博技巧  谷歌浏览器如何查找和删除恶意软件 谷歌浏览器内置安全清理工具使用教程  AffinityDesigner图层蒙版怎么用_AffinityDesigner图层蒙版设计应用  解决CSS容器溢出问题:使用calc()实现精确布局与边距控制  QQ阅读小说搜索入口地址_QQ阅读小说搜索入口地址搜索在线阅读  聚水潭ERP后台管理系统登录 聚水潭ERP官方登录通道  todesk如何添加信任设备_todesk信任设备设置教程  Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析  电脑视频号|直播|如何分享屏幕  《随手记》关闭首页消息推送方法  以下哪一项是古代兵书三十六计中的计谋  虫虫助手如何更新游戏  B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】  Flexbox布局实践:实现底部页脚与顶部粘性导航条的完美结合  悟空浏览器网页版在线工具 悟空浏览器网页版在线平台入口  《单词速记宝》设置学习计划方法  《深林》冬季章节图文攻略  B站怎么快速升级 B站用户等级提升攻略【详解】  qq邮箱格式填写示例 qq邮箱标准填写规范  跨语言测试实践:使用Python Selenium测试现有J*a Web项目  Win10如何查看已安装的更新补丁 Win10卸载指定更新教程【教程】  J*aScript实现下拉菜单驱动的动态表格数据展示  猫眼电影app怎么查询电影院的营业时间_猫眼电影影院营业时间查询教程  VB表达式书写规则解析  在J*a里什么是行为抽象_抽象行为对代码复用的提升作用  如何在CSS中使用伪类选择器_hover实现悬停效果 

 2020-03-19

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.