假设我每隔几分钟用快照设置我的 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/