transactions - 如果 Redis 在事务中间触发快照怎么办?

标签 transactions redis backup snapshot

假设我每隔几分钟用快照设置我的 Redis 备份,不幸的是当快照被触发时,一个事务(使用管道)正在处理中。 Redis 是如何处理这种情况的呢?快照会延迟到交易完成吗?或者保存交易的第一部分?或者在下一次备份之前排除整个事务?

最佳答案

请记住,Redis 是一个单线程事件循环。执行 EXEC 命令时,事务以原子方式应用。因此,RDB 后台保存进程要么在 EXEC 之前 fork ,要么在 EXEC 之后 fork 。您可以认为 fork 对 Redis 的内存进行了即时快照。

如果 EXEC 在 fork 之前应用,那么您的交易将在生成的转储中。如果在 fork 之后应用 EXEC,您的事务将不会在转储中,即使 Redis 需要几分钟才能生成它。不会有任何延迟(交易和转储都不会)。

附带说明一下,除非您的数据库很小,否则每隔几分钟进行一次转储可能太繁重了。也许您应该考虑改用仅附加文件。

关于transactions - 如果 Redis 在事务中间触发快照怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28313732/

相关文章:

mysql - 事务中的游标循环

mysql - 使用 Spring、Hibernate 和 mySQL 进行事务管理

redis - 在指向同一个 MessageStore 的集群环境中使用 Spring Integration Aggregator

java - 如何找回eclipse中删除的项目

java - Firebase java : during transaction errors, 我应该返回 Transaction.abort() 与 Transaction.success(...) 吗?

node.js - Redis-Node库,使用什么数据结构?

php - 有没有办法用 Cron Job 加载页面?

android - 使用 Google 云端硬盘作为应用程序备份

redis - 如果另一个键中的计数器低于零,则以原子方式从集合中删除一个项目?

redis - 我可以通过任何方式在 Redis 中存储超过其 RAM 大小的数据吗?