Redis 阻塞保存

Posted

技术标签:

【中文标题】Redis 阻塞保存【英文标题】:Redis Blocking Save 【发布时间】:2011-01-21 15:40:10 【问题描述】:

如何强制 Redis 进行阻塞保存?我正在使用 Ruby Redis gem,但我相信这个问题并不特定于该库。似乎 SAVE 和 BGSAVE 命令似乎会在后台执行某些操作,从而在后续调用中导致“-ERR 后台保存正在进行”错误。

希望这将是一个无聊的同步调用,它会阻塞所有其他 Redis 命令,直到“dump.rdb”的保存完成。希望这不需要真正关闭服务器,使用“/etc/init.d/redis-server”。大概我应该使用 LASTSAVE 命令进行轮询?

【问题讨论】:

【参考方案1】:

如果您调用 SAVE,但收到有关正在进行的后台保存的错误,这意味着还有一个 BGSAVE 正在进行中,因为其中一个是正确的:

1) 有人叫 BGSAVE 2) Redis配置为定时保存(默认)。

所以你的保存失败,因为已经有一个保存在进行中。您可以检查是否有后台在进行中,并在完成时检查 INFO 输出。

【讨论】:

【参考方案2】:

SAVE 是a synchronous save; BGSAVE 是 the asynchronous one。

为什么你认为SAVE 在后台运行?

【讨论】:

【参考方案3】:

Redis#save 就是这样做的。你用的是什么版本的 Redis 和 redis gem?

【讨论】:

以上是关于Redis 阻塞保存的主要内容,如果未能解决你的问题,请参考以下文章

大数据之Redis:RDB保存的文件

redis持久化之RDB

redis架构模式(6)数据倾斜

Redis持久化

异步编程规避Redis的阻塞(中)

异步编程规避Redis的阻塞(中)