问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

redis怎么会崩溃

发布网友 发布时间:2022-04-30 14:49

我来回答

1个回答

热心网友 时间:2022-04-09 23:35

由于redis存储在内存中且提供一般编程语言常用的数据结构存储类型,所以经常被用于做服务器崩溃宕机的数据恢复处理。

服务器可以在某些指定过程中将需要保存的数据以json对象等方式存储到redis中,也就是我们常说的快照,当服务器运行时读取redis来判断是否有待需要恢复数据继续处理的业务。

当一次业务处理结束后再删除redis的数据即可。

redis提供两种将内存数据导出到硬盘实现数据备份的方法:

RDB方式(默认)


RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的所有数据进行快照并存储在硬盘上。进行快照的条件可以由用户在配置文件中自定义,由两个参数构成:时间和改动的键的个数。当在指定的时间内被更改的键的个数大于指定的数值时就会进行快照。RDB是redis默认采用的持久化方式,在配置文件中已经预置了3个条件:


save 900 1    # 900秒内有至少1个键被更改则进行快照
save 300 10   # 300秒内有至少10个键被更改则进行快照
save 60 10000 # 60秒内有至少10000个键被更改则进行快照
可以存在多个条件,条件之间是“或”的关系,只要满足其中一个条件,就会进行快照。 如果想要禁用自动快照,只需要将所有的save参数删除即可。


Redis默认会将快照文件存储在当前目录(可CONFIG GET dir来查看)的mp.rdb文件中,可以通过配置dir和dbfilename两个参数分别指定快照文件的存储路径和文件名。


Redis实现快照的过程


Redis使用fork函数复制一份当前进程(父进程)的副本(子进程);
父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件;
当子进程写入完所有数据后会用该临时文件替换旧的RDB文件,至此一次快照操作完成。
在执行fork的时候操作系统(类Unix操作系统)会使用写时复制(copy-on-write)策略,即fork函数发生的一刻父子进程共享同一内存数据,当父进程要更改其中某片数据时(如执行一个写命令 ),操作系统会将该片数据复制一份以保证子进程的数据不受影响,所以新的RDB文件存储的是执行fork一刻的内存数据。


Redis在进行快照的过程中不会修改RDB文件,只有快照结束后才会将旧的文件替换成新的,也就是说任何时候RDB文件都是完整的。这使得我们可以通过定时备份RDB文件来实 现Redis数据库备份。RDB文件是经过压缩(可以配置rdbcompression参数以禁用压缩节省CPU占用)的二进制格式,所以占用的空间会小于内存中的数据大小,更加利于传输。


除了自动快照,还可以手动发送SAVE或BGSAVE命令让Redis执行快照,两个命令的区别在于,前者是由主进程进行快照操作,会阻塞住其他请求,后者会通过fork子进程进行快照操作。 Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存。根据数据量大小与结构和服务器性能不同,这个时间也不同。通常将一个记录一千万个字符串类型键、大小为1GB的快照文件载入到内 存中需要花费20~30秒钟。 通过RDB方式实现持久化,一旦Redis异常退出,就会丢失最后一次快照以后更改的所有数据。这就需要开发者根据具体的应用场合,通过组合设置自动快照条件的方式来将可能发生的数据损失控制在能够接受的范围。如果数据很重要以至于无法承受任何损失,则可以考虑使用AOF方式进行持久化。


AOF方式


默认情况下Redis没有开启AOF(append only file)方式的持久化,可以在redis.conf中通过appendonly参数开启:


appendonly yes
在启动时Redis会逐个执行AOF文件中的命令来将硬盘中的数据载入到内存中,载入的速度相较RDB会慢一些


开启AOF持久化后每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘中的AOF文件。AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof,可以通过appendfilename参数修改:


appendfilename appendonly.aof
配置redis自动重写AOF文件的条件


auto-aof-rewrite-percentage 100  # 当目前的AOF文件大小超过上一次重写时的AOF文件大小的百分之多少时会再次进行重写,如果之前没有重写过,则以启动时的AOF文件大小为依据
auto-aof-rewrite-min-size 64mb   # 允许重写的最小AOF文件大小
配置写入AOF文件后,要求系统刷新硬盘缓存的机制


# appendfsync always   # 每次执行写入都会执行同步,最安全也最慢
appendfsync everysec   # 每秒执行一次同步操作
# appendfsync no       # 不主动进行同步操作,而是完全交由操作系统来做(即每30秒一次),最快也最不安全
Redis允许同时开启AOF和RDB,既保证了数据安全又使得进行备份等操作十分容易。此时重新启动Redis后Redis会使用AOF文件来恢复数据,因为AOF方式的持久化可能丢失的数据更少

我们简单做一个定时计数器的小程序

[javascript] view plain copy

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
桃李芬芳的近义词是? 请会答正确。 急... 墨西哥很混乱吗 为什么我的OPPOR9手机连接到任何蓝牙设备放歌曲,都没有办法在蓝牙设备... OPPOA9如何连接酷狗与手机蓝牙? 华为荣耀3X 白色畅玩版的声音调至最大声仍很小声 荣耀3x刷机后卸载了一些系统软件,然后就无法开机,一直停留在开机界面... 平安富赢金生年金保险值得买吗?最全产品测评! 收音机音量旋钮音量最大还是小 德生pl_450收音机音量电位器声音惑大惑小,电位器的型号是什么_百度知 ... 浙江金融学院有什么专业 redis删除的数据怎么恢复数据 根据物体振动时规则与否,音被分为“乐音”和“噪音”两大类。下列属于噪音乐 redis flushall 后怎么恢复数据 根据什麽音乐分为”乐音”与”噪音” 如何判断Redis重启后数据是否恢复完成 redis恢复数据后对设置了有效期的数据有影响吗 怎样区分乐音与噪音? 什么叫乐音?什么叫噪音答案 问问乐音与噪音的区别是什么? 刮腻子刮灰打磨在哪找工作? 下载歌曲都有那几种格式,应该怎样转换? 旧楼房想重新简单装修一下,白墙。请问还需要铲墙后重新刮腻子吗?在原来的基础上直接刷漆可以吗? 怎么转换下载的歌曲格式??? 新房装修,墙面情况较好,刮腻子粉时,还需要贴网格布吗? 天棚基层处理与刮腻子是否是两道工序 请教旧房改造刮腻子刷漆的问题,急呀~~帮忙~~~ 柜子后面需要刮腻子吗?如果不需要,应该怎么处理比较好? 下载的歌曲格式不对怎么办 接了几栋楼抹灰、刮腻子、喷涂料的轻包活有会干的指点一下。 下载歌的时候,格式不正确,怎么转换? 我能收到他发发过来的微信消息,但我发过去的却拒收了,这是怎么回事? ...他还能给我发消息,我却不能给他发的原因是什么? 作梦给病重的老人洗手洗脸好不好? 梦见自己给老人洗脸 梦见亲人帮老年人打扫卫生 刘国平的介绍 三星s10能用backhome吗 刚刚从鱼卵里孵化出来的金鱼,该怎么去饲养它们呢? 金鱼卵子怎么养?请有经验的帮帮忙吧! 中建八局:住广东越绣小区建设领导人 我家的金鱼下鱼籽了,怎样才能养活呢 中建八局青岛公司的 法人是谁 中建八局青岛公司的 法人是谁 济南中建八局有姓汪的董事长吗,或者副总什么的 贺海飞的主要经历 金鱼产卵之后,该怎么去照顾那些鱼卵呢? 金鱼产卵后怎么处理?鱼缸里的水怎么处理? 中建有匡性领导吗 自己粉丝的抖音号被封住,自动取消关注吗? 金鱼产卵后要怎么处理 金鱼产了鱼卵之后该怎么办?