mpi如何选择合适的进程数量_Redis持久化机制,优缺点,如何选择合适方式

1 什么是Redis持久化?

持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。

2 Redis 的持久化机制是什么?各自的优缺点?

Redis 提供两种持久化机制 RDB(默认) 和 AOF 机制:

RDB:是Redis DataBase缩写快照

RDB是Redis默认的持久化方式。按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。通过配置文件中的save参数来定义快照的周期。

6f1cd9a39a6e1b041064f3e94df12fc6.png

优点:

1、只有一个文件 dump.rdb,方便持久化。2、容灾性好,一个文件可以保存到安全的磁盘。3、性能最大化,fork 子进程来完成写操作,让主进程继续处理命令,所以是 IO 最大化。使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 redis 的高性能4.相对于数据集大时,比 AOF 的启动效率更高。

缺点:

1、数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候)2、AOF(Append-only file)持久化方式: 是指所有的命令行记录以 redis 命令请 求协议的格式完全持久化存储)保存为 aof 文件。

触发机制-主要三种方式

save(同步)

bgsave(异步)

自动

save命令:客户端向Redis发送save命令来创建一个快照文件。

eda9ae8ca0df75ce3e202ff917da3ecd.png

执行save命令的时候,如果存在老的快照文件,新的将会替换老的。

bgsave命令:客户端向Redis发送bgsave命令,Redis调用fork创建一个子进程,

然后子进程负责将快照写入硬盘,而父进程则继续处理命令请求。

19077de17739f35b44ba526ffb406c79.png

save命令和bgsave命令对比:

64850689539bb307e2a75c829fc53f6d.png
006959a293509727ed057e5bb2062fb1.png

快照持久化选项:

dbfilename dump-${port}.rdbdir /bigdiskpathstop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yes

最佳配置:

dbfilename dump-${port}.rdbdir /bigdiskpathstop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yes

AOF:持久化

AOF持久化(即Append Only File持久化),则是将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志中文件恢复数据。

当两种方式同时开启时,数据恢复Redis会优先选择AOF恢复。

0d2f7f2415b04d01c5052b750e7d78ef.png

优点:

1、数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次 命令操作就记录到 aof 文件中一次。2、通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof 工具解决数据一致性问题。3、AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前(文件过大时会对命令 进行合并重写),可以删除其中的某些命令(比如误操作的 flushall))

缺点:

1、AOF 文件比 RDB 文件大,且恢复速度慢。2、数据集大的时候,比 rdb 启动效率低。

优缺点比较?

  1. AOF文件比RDB更新频率高,优先使用AOF还原数据。
  2. AOF比RDB更安全也更大
  3. RDB性能比AOF好
  4. 如果两个都配了优先加载AOF

AOF三种策略

always:每条Redis写命令都同步写入硬盘。

66887ea0cdad922a74a1c16b3f4fe263.png

everysec:每秒执行一次同步,将多个命令写入硬盘。

66887ea0cdad922a74a1c16b3f4fe263.png

no:由操作系统决定何时同步。

3fbefb40b367245e2d6df1e399997b64.png

三种策略对比:生产环境中需要根据实际的需求进行选择。

AOF重写

随着Redis的运行,被执行的写命令不断同步到AOF文件中,AOF文件的体积越来越大,极端情况将会占满所有的硬盘空间。如果AOF文件体积过大,还原的过程也会相当耗时。为了解决AOF文件不断膨胀的问题,需要移除AOF文件中的冗余命令来重写AOF。

5e50894c583d997865606afcb087a556.png

AOF重写的两种实现方式:

bgrewriteaof命令

bgrewriteaof命令和bgsave命令的工作原理相似:Redis创建一个子进程,然后由子进程负责对AOF文件进行重写。

9fa1eac0d3cdcabc71f34e272359fd9d.png

AOF重写配置

配置参数说明:

fe99d5cc140fe94c37d631e7335905eb.png

具体配置:

appendonly yesappendfilename "appendonly-${port}.aof"appendfsync everyscdir /bigdiskpathno-appendfsync-on-rwrite yesauto-aof-rewrit-percentage 100auto-aof-rewrite-min-size 64mb

3 如何选择合适的持久化方式

一般来说, 如果想达到足以媲美PostgreSQL的数据安全性,你应该同时使用两种持久化功能。在这种情况下,当 Redis 重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。

如果你非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失,那么你可以只使用RDB持久化。

有很多用户都只使用AOF持久化,但并不推荐这种方式,因为定时生成RDB快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比AOF恢复的速度要快,除此之外,使用RDB还可以避免AOF程序的bug。

如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式。

4 Redis持久化数据和缓存怎么做扩容?

如果Redis被当做缓存使用,使用一致性哈希实现动态扩容缩容。

如果Redis被当做一个持久化存储使用,必须使用固定的keys-to-nodes映射关系,节点的数量一旦确定不能变化。否则的话(即Redis节点需要动态变化的情况),必须使用可以在运行时进行数据再平衡的一套系统,而当前只有Redis集群可以做到这样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值