在缓存服务中保障可靠性

举报
码乐 发表于 2024/12/28 09:50:34 2024/12/28
【摘要】 1 简介redis是可以选择将数据同步存储在磁盘提供高可靠性,同时有关联的多个查询在mysql中常使用锁的机制实现事务保证数据完整性。本文介绍缓存服务redis中红锁与事务的锁应用。 2 事务和锁在redis的事务和分布式红锁Redis 的数据同步与高可靠性Redis 提供两种主要的方式将内存数据同步到磁盘以确保高可靠性:RDB 快照 和 AOF(Append-Only File)日志。R...

1 简介

redis是可以选择将数据同步存储在磁盘提供高可靠性,
同时有关联的多个查询在mysql中常使用锁的机制实现事务保证数据完整性。

本文介绍缓存服务redis中红锁与事务的锁应用。

2 事务和锁

在redis的事务和分布式红锁

  • Redis 的数据同步与高可靠性

Redis 提供两种主要的方式将内存数据同步到磁盘以确保高可靠性:RDB 快照 和 AOF(Append-Only File)日志。

  1. RDB(Redis Database Backup)

RDB 通过定期创建数据库的快照,将内存中的数据以二进制文件的形式写入磁盘。

Redis 使用 SAVE 或 BGSAVE 命令触发 RDB 生成。
BGSAVE:在后台 fork 一个子进程完成快照,而主进程继续处理请求。
RDB 文件是压缩的二进制文件,体积小,易于备份和恢复。

优点:

性能较高,快照生成时对主进程影响较小。
文件小,适合冷备份。

缺点:

数据一致性问题:发生故障时可能丢失最后一次快照后的数据。
快照生成频繁会带来性能开销。

  1. AOF(Append-Only File)

AOF 记录每个写操作,以日志的形式追加存储到文件中。

原理:

每次执行写操作,Redis 将该操作以文本形式记录到 AOF 文件。

Redis 提供三种同步策略:
always:每次写操作立即同步到磁盘(性能低,可靠性最高)。
everysec(默认):每秒同步一次(性能与可靠性折中)。
no:由操作系统决定同步时间(性能高,但可靠性低)。
AOF 文件过大时,Redis 会触发 AOF 重写,压缩日志文件。

优点:

数据恢复能力强:日志记录所有写操作,可恢复到最近的状态。
可读性好:AOF 文件是文本格式,便于分析。

缺点:

文件体积大于 RDB,持久化开销较高。
性能可能受同步策略影响。

  1. 混合模式

Redis 4.0 引入 RDB + AOF 混合模式,在重写 AOF 文件时,将 RDB 数据作为初始状态写入,随后追加增量操作日志。

优势:

结合了 RDB 的快速恢复与 AOF 的高可靠性。
Redis 是否使用锁机制保证事务完整性?
Redis 支持事务,但它的事务机制与传统数据库不同,遵循以下特点:

3 Redis 的事务

Redis 使用 MULTI 和 EXEC 命令实现事务功能:

事务的核心:

MULTI 开启事务。
事务内的命令会按顺序进入命令队列。
EXEC 执行队列中的所有命令。

如果执行失败,Redis 不会回滚,失败的命令直接报错。
原子性:Redis 保证事务内的命令在 EXEC 时按顺序执行,但不提供单个事务的部分回滚。
锁机制:Redis 的单线程模型确保了操作之间的顺序性,无需加锁。

  1. 事务中的多个查询是否加锁

Redis 不需要传统意义上的锁:

单线程模型:Redis 内部的事件循环是单线程处理的,所有客户端请求按顺序执行,避免了数据竞争。
事务期间一致性:Redis 不会中途被其他操作打断,因此可以认为事务内的命令是逻辑上的原子操作。

4 红锁与事务的锁的区别

  1. Redis 事务的锁

Redis 事务(MULTI/EXEC)本身没有显式的锁机制,主要依靠 Redis 单线程的特性保证命令顺序执行。事务中的每条命令独立执行,没有回滚机制。如果某条命令失败,不会影响其他命令的执行。

特点:

单机模式下无需显式加锁。
事务执行期间,其他客户端请求在队列中排队,保证顺序性。
不提供分布式环境下的锁定能力。

  1. Redis 红锁

红锁(Redlock) 是 Redis 提供的一种分布式锁实现,适用于多个 Redis 实例组成的分布式环境,用于在多个客户端之间协同控制资源的访问。

实现原理:

客户端在多个独立 Redis 实例(建议为奇数个)上尝试获取锁。
如果在大多数实例(如 3/5 个)上成功获取锁,并且总耗时低于锁的有效期,则认为锁获取成功。
客户端执行任务,完成后释放锁。

锁由 Redis 的 SET key value NX PX timeout 命令实现:

NX:确保锁的唯一性(键不存在时设置)。
PX timeout:设置锁的过期时间,防止死锁。

特点:

分布式场景:适合多节点 Redis 环境,支持高可用和故障恢复。
抗故障能力:利用多实例冗余避免单点失败。
需要时间同步:要求各节点时间偏差较小,否则可能导致锁的有效期失效。

  两者的比较
  特性	事务锁									红锁
  适用场景	单机 Redis,保证命令顺序执行		分布式环境下控制资源访问
  实现机制	单线程顺序执行,无需显式加锁		基于多实例协调的分布式锁
  锁粒度	逻辑上的事务队列					资源级锁
  回滚支持	不支持,部分失败不会回滚			不涉及事务语义,仅控制资源访问
  可靠性	依赖单机 Redis						高可用,抗节点故障

5 总结

Redis 通过 RDB 和 AOF 提供高可靠性数据存储。RDB 适合快速恢复,AOF 提供更好的数据一致性保障,混合模式结合了两者的优点。

Redis 事务使用单线程模型,不需要锁机制,事务保证命令的顺序执行,但没有传统数据库的回滚功能。
红锁是 Redis 提供的分布式锁,用于分布式场景,和 Redis 事务的实现目标和使用场景完全不同,适合控制分布式资源的并发访问。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。