聊聊Redis的持久化机制,到底采用RDB还是AOF呢?

本篇文章带大家了解一下redis持久化机制rdbaof),聊聊到底采用rdb还是aof呢?希望对大家有所帮助!

聊聊Redis的持久化机制,到底采用RDB还是AOF呢?

RDB

1. 什么是RDB

RDB:每隔一段时间,把内存中的数据写入磁盘的临时文件,作为快照,恢复的时候把快照文件读进内存。如果宕机重启,那么内存里的数据肯定会没有的,那么再次启动redis后,则会恢复。【相关推荐:Redis视频教程】

2. 备份与恢复

内存备份 –> 磁盘临时文件
临时文件 –> 恢复到内存

3. RDB优劣势

优势

每隔一段时间备份,全量备份

灾备简单,可以远程传输

子进程备份的时候,主进程不会有任何io操作(不会有写入修改或删除),保证备份数据的的完整性

相对AOF来说,当有更大文件的时候可以快速重启恢复

劣势

发生故障是,有可能会丢失最后一次的备份数据

子进程所占用的内存比会和父进程一模一样,如会造成CPU负担

由于定时全量备份是重量级操作,所以对于实时备份,就无法处理了。

4. RDB的配置

保存位置,可以在redis.conf自定义:
/user/local/redis/working/dump.rdb

保存机制:

save 900 1save 300 10save 60 10000save 10 3

登录后复制

* 如果1个缓存更新,则15分钟后备份* 如果10个缓存更新,则5分钟后备份* 如果10000个缓存更新,则1分钟后备份

登录后复制

stop-writes-on-bgsave-error

yes:如果save过程出错,则停止写操作no:可能造成数据不一致

rdbcompression

yes:开启rdb压缩模式no:关闭,会节约cpu损耗,但是文件会大,道理同nginx

rdbchecksum

yes:使用CRC64算法校验对rdb进行数据校验,有10%性能损耗no:不校验

总结

RDB适合大量数据的恢复,但是数据的完整性和一致性可能会不足。

AOF

AOF特点

以日志的形式来记录用户请求的写操作。读操作不会记录,因为写操作才会存存储。

文件以追加的形式而不是修改的形式。

redis的aof恢复其实就是把追加的文件从开始到结尾读取执行写操作。

优势

AOF更加耐用,可以以秒级别为单位备份,如果发生问题,也只会丢失最后一秒的数据,大大增加了可靠性和数据完整性。所以AOF可以每秒备份一次,使用fsync操作。

以log日志形式追加,如果磁盘满了,会执行 redis-check-aof 工具

当数据太大的时候,redis可以在后台自动重写aof。当redis继续把日志追加到老的文件中去时,重写也是非常安全的,不会影响客户端的读写操作。

AOF 日志包含的所有写操作,会更加便于redis的解析恢复。

劣势

相同的数据,同一份数据,AOF比RDB大

针对不同的同步机制,AOF会比RDB慢,因为AOF每秒都会备份做写操作,这样相对与RDB来说就略低。 每秒备份fsync没毛病,但是如果客户端的每次写入就做一次备份fsync的话,那么redis的性能就会下降。

AOF发生过bug,就是数据恢复的时候数据不完整,这样显得AOF会比较脆弱,容易出现bug,因为AOF没有RDB那么简单,但是呢为了防止bug的产生,AOF就不会根据旧的指令去重构,而是根据当时缓存中存在的数据指令去做重构,这样就更加健壮和可靠了。

AOF的配置

`# AOF 默认关闭,yes可以开启appendonly no# AOF 的文件名appendfilename "appendonly.aof"# no:不同步# everysec:每秒备份,推荐使用# always:每次操作都会备份,安全并且数据完整,但是慢性能差appendfsync everysec# 重写的时候是否要同步,no可以保证数据安全no-appendfsync-on-rewrite no# 重写机制:避免文件越来越大,自动优化压缩指令,会fork一个新的进程去完成重写动作,新进程里的内存数据会被重写,此时旧的aof文件不会被读取使用,类似rdb# 当前AOF文件的大小是上次AOF大小的100% 并且文件体积达到64m,满足两者则触发重写auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb`

登录后复制

到底采用RDB还是AOF呢?

如果你能接受一段时间的缓存丢失,那么可以使用RDB

如果你对实时性的数据比较care,那么就用AOF

使用RDB和AOF结合一起做持久化,RDB做冷备,可以在不同时期对不同版本做恢复,AOF做热备,保证数据仅仅只有1秒的损失。当AOF破损不可用了,那么再用RDB恢复,这样就做到了两者的相互结合,也就是说Redis恢复会先加载AOF,如果AOF有问题会再加载RDB,这样就达到冷热备份的目的了。

更多编程相关知识,请访问:编程入门!!

以上就是聊聊Redis的持久化机制,到底采用RDB还是AOF呢?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2039721.html

(0)
上一篇 2025年2月24日 00:04:35
下一篇 2025年2月22日 22:36:56

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 浅谈Redis中缓存过期、内存被缓存占用要怎么处理?

    浅谈redis中缓存过期、内存被缓存占用要怎么处理?下面本篇文章带大家了解一下redis中的缓存过期处理策略和内存淘汰机制,希望对大家有所帮助! 已过期的key如何处理? 设置了expire的key缓存过期了,但是服务器的内存还是会被占用,…

    2025年2月24日
    200
  • 聊聊Redis中的哨兵模式(Sentine)

    本篇文章带大家了解一下redis中的哨兵模式(sentine),介绍一下sentinel工作机制、sentinel模式怎么搭建,希望对大家有所帮助! Redis Sentinel哨兵模式 是一个分布式系统, 你可以在一个架构中运行多个 Se…

    2025年2月24日
    200
  • Redis如何实现分布式锁?聊聊实现方法

    如何使用 redis 实现分布式锁?下面本篇文章给大家介绍一下基于 redis 实现分布式锁的方法,希望对大家有所帮助! 在一个分布式系统中,会遇到一些需要对多个节点共享的资源加锁的情况,这个时候需要用到分布式锁。分布式锁通常保存在一个共享…

    2025年2月24日
    200
  • 深入聊聊Redis中的双链表

    本篇文章带大家了解一下redis 数据结构中的双链表,简单介绍一下双链表的运用,希望对大家有所帮助! 在 Redis 数据类型中的列表list,对数据的添加和删除常用的命令有 lpush,rpush,lpop,rpop,其中 l 表示在左侧…

    2025年2月24日
    200
  • 深入浅析Redis中的位图(bitmap)

    本篇文章带大家了解一下redis中的位图(bitmap),希望对大家有所帮助! Redis 的位图(bitmap)是由多个二进制位组成的数组,数组中的每个二进制位都有与之对应的偏移量(从 0 开始),通过这些偏移量可以对位图中指定的一个或多…

    2025年2月24日
    200
  • 分享一些好用Redis可视化工具

    本篇文章给大家总结了几款好用redis可视化工具,觉得挺不错的,现在分享给大家,也给大家做个参考,希望对大家有所帮助! 不啰嗦,我们直接开始! 1、命令行 1.1、iredis 利用iredis,用|将redis通过pipe用shell的其…

    2025年2月24日 数据库
    200
  • 整理一些常见Redis数据结构(总结)

    本篇文章给大家整理分享一些常见redis数据结构,还有一些常用指令整理,希望对大家有所帮助! 什么是数据结构? 有Java基础的应该知道常用的一些数据结构,比如数组、队列、栈等等… 那Redis的数据结构跟Java的数据结构有什…

    2025年2月24日
    200
  • 分享一些好用的Redis运维工具

    本篇文章给大家分享一些好用的redis运维工具,看看怎么进行运行状态监控、数据迁移、集群管理,希望对大家有所帮助! 我们在应用Redis时,经常会面临的运维工作,包括Redis的运行状态监控,数据迁移,主从集群、切片集群的部署和运维。接下来…

    2025年2月24日
    200
  • 聊聊Redis数据结构中的String类型

    本篇文章带大家一起了解一下redis数据结构中的string类型,并聊聊redis的kv存储结构,希望对大家有所帮助! Redis常用作分布式KV缓存,很多人仅仅只会使用,却不知道底层却有着很多不为人知的秘密。【相关推荐:Redis视频教程…

    2025年2月24日
    200
  • Redis学习之聊聊单线程的reactor模型

    本篇文章带大家聊聊redis中单线程的reactor模型,i/o模型,还有多线程版本i/o模型,希望对大家有所帮助! redis 的高性能 纯内存访问,所有数据都在内存中,所有的运算都是内存级别的运算,内存响应时间的时间为纳秒级别。因此 r…

    2025年2月24日
    200

发表回复

登录后才能评论