Rides 持久化

Rides有两种持久化机制:

一、RDB(把当前数据生成快照保存到硬盘上)

RDB的持久化可以手动触发也可以自动触发

1.手动触发:

使用save或者bgsave命令可以手动触发持久化,但是使用save命令会阻塞rides线程,会对rides效率产生一些影响。使用bgsave命令一般不会阻塞线程,因为rides会执行fork操作创建一个子进程,将持久化的操作交给子进程,rides的阻塞只会发生在执行fork操作时,一般情况下时间很短。具体流程如下:

1.执行ogsave命令,Redisi进程先判断当前是否存在
正在执行的RDB或AOF子线程,如果存在就是直
接结束。
2.Redisi进程执行fork操作创建子线程,在fork操作
的过程中Redis进程会被阻塞。
3.Redisi进程fork完成后,bgsave命令就结束了,自
此Redis进程不会被阻塞,可以响应其他命令。
4.子进程根据Redisi进程的内存生成快照文件,并
替换原有的RDB文件。
5.子进程通过信号量通知Redisi进程已完成。

2.自动触发:

1.在配置文件中设置了save的相关配置,如sava m
n,它表示在m秒内数据被修改过次时,自动轴
发bg3ave操作。
2.当从节点做全量复制时,主节点会自动执行
bg3ave操作,并且把生成的RDB文件发送给从节
点。
3.执行debug reloadi命令时,也会自动触发bg3ave
操作。
4.执行shutdown命令时,如果没有开启AOF持久化
也会自动触发bgsavef操作。

3.优缺点

RDB文件是一个紧凑的二进制压缩文件,是Redis在某个时间点的全部数据快照。所以使用RDB恢复数据的速度远远比AOF的快,非常适合备份、全量复制、灾难恢复等场景。但是每次进ogsave操作都要执行fork操作创建子经常,属于重量级操作,频繁执行成本过高,所以无法做到实时持久化,或者秒级持久化。另外,由于Redis版本的不断迭代,存在不同格式的RDB版本,有可能出现低版本的RDB格式无法兼容高版本RDB文件的问题。

二、AOF(记录每次对数据的操作到硬盘上)

1.持久化流程

1.命令追加(append):所有写命令都会被追加到AOF缓存区(aof buf)中。
2.文件同步(sync):根据不同策略将AOF缓存区同步到AOF文件中。
3.文件重写(rewrite):定期对AOF文件进行重写,以达到压缩的目的。
4.数据加载(1oad):当需要恢复数据时,重新执行AOF文件中的命令。

2.文件同步策略

AOF持久化流程中的文件同步有以下几个策略:
1.awys:每次写入缓存区都要同步到AOF文件中,硬盘的操作比较慢,限制了Reds高并发,不建议配置。
2.n0:每次写入缓存区后不进行同步,同步到AOF文件的操作由操作系统负责,每次同步AOF文件
的周期不可控,而且增大了每次同步的硬盘的数据量。
3.eversec:每次写入缓存区后,由专门的线程每秒钟同步一次,做到了兼顾性能和数据安全。是建
议的同步策略,也是默认的策略。

3.触发文件重写

1.手动触发:使用bgrewriteao:命令。
2.自动触发:根据auto-aof-rewrite--min-size和auto-aof-rewrite-percentage配置确定自动触发的时机.auto-aof-rewrite-min-size表示运行AOF重写时文件大小的最小值,默认为64MB;auto-aof
rewrite-percentage表示当前AOF文件大小和上一次重写后AOF文件大小的比值的最小值,默认为
100。只用前两者同时超过时才会自动触发文件重写。

4.AOF持久化配置

AOF持久化默认是不开启的,需要修改配置文件,如:

# appendonly改为yes,开启AOF
appendonly yes
# AOF文件的名字
appendfilename "appendonly.aof"
# AOF文件的写入方式
# everysec 每个一秒将缓存区内容写入文件 默认开启的写入方式
appendfsync everysec
# 运行AOF重写时AOF文件大小的增长率的最小值
auto-aof-rewrite-percentage 100
# 运行AOF重写时文件大小的最小值
auto-aof-rewrite-min-size 64mb

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Rides是一个分布式锁实现的库,它提供了简单而强大的分布式锁功能。你可以使用Rides来保证在分布式系统中的多个节点之间互斥地访问共享资源。 要使用Rides实现分布式锁,你需要先安装Rides库,并确保所有的节点都能够访问到该库。然后,你可以按照以下步骤来实现分布式锁: 1. 创建一个Rides实例:首先,你需要创建一个Rides实例,这个实例将负责协调各个节点之间的锁状态。你可以使用Rides的构造函数来创建实例,传入一个唯一的标识符作为参数。 2. 获取锁:当一个节点需要访问共享资源时,它可以通过调用Rides实例的`acquire`方法来获取锁。这个方法会返回一个布尔值,表示是否成功获取到了锁。如果获取到了锁,节点就可以继续执行后续的操作;如果没有获取到锁,则需要等待一段时间后再次尝试。 3. 释放锁:当一个节点完成了对共享资源的访问后,它应该调用Rides实例的`release`方法来释放锁。这样,其他节点就有机会获取到锁并继续执行它们的操作。 需要注意的是,Rides并不提供自动解锁的功能。所以,在使用Rides时,你需要确保在获取到锁之后,一定要记得在适当的时候释放锁,否则可能会导致资源无法被其他节点访问。 以上就是使用Rides实现分布式锁的基本步骤。通过Rides,你可以方便地实现分布式系统中的资源互斥访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值