将 Redis 与 Postgresql 同步

Geo*_*ath 4 ruby postgresql redis

我有一个用例,持久数据将保留在 PostgreSQL 中,并且通过 Redis 实例进行查找。我想频繁地从 PostgreSQL 到 Redis 进行单向同步,以保持 Redis 实例最新。(Redis 短时间内有陈旧数据是可以的。)

有没有任何工具、库或技术可以做到这一点(我不需要重新发明轮子)?

我的应用程序堆栈有 PostgreSQL 和 Ruby on Rails。Node.js 也可以考虑。

zen*_*eni 5

这取决于您的时间限制。是实时的吗?+- 1 秒?+- 1 分钟?+- 1 天?

如果您正在寻找最快的解决方案(< 1 秒),我建议您查看 Storm:一种具有高计算能力的拓扑,它将对您定义的表上的数据库(PostGreSQL 这里带有“Spout”)进行脏检查,并推送结果是 redis(在“Bolt”中)。然而,它的功能非常强大,但如果你有很多演变,它会比基本脚本更灵活,并且应该具有相当的弹性和可扩展性。

http://storm.incubator.apache.org/

如果您可以“等待”更长的时间,那么您可以定义一个定期的 lua 脚本来检查 PostGreSQL 并将较新的值放入 redis 中。Lua 很好,因为有 PostGreSQL 和 Redis 的客户端,但许多其他语言也适合。Lua 也可以在 Redis 中使用“eval”命令,所以使用相同的语言应该很好。

你也可以看看ETL解决方案,有很多。

小心同步:Redis 仅具有乐观锁定,如果您需要悲观锁定(网络争用等...),您可以定义自己的锁定(“Redis in Action”书中有示例),也可以使用 Lua 脚本( Redis 是单线程的:当执行 lua 脚本时,不会同时执行其他任何操作)。

如果您不喜欢脏检查,请查看 PostGreSQL 触发器,看看是否可以定义一些触发器并从中调用脚本。