将Redis与Postgresql同步

时间:2014-05-28 11:45:28

标签: ruby postgresql redis

我有一个用例,其中持久数据将保留在PostgreSQL中,并且查找通过Redis实例进行。我想经常从PostgreSQL到Redis进行单向同步,以使Redis实例保持最新状态。 (Redis可以在短时间内获得陈旧数据。)

是否有任何工具,库或技术(我不需要重新发明轮子)?

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

1 个答案:

答案 0 :(得分:1)

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

如果您正在寻找最快的解决方案(<1秒),我建议您查看Storm:一个具有高计算能力的拓扑,这会破坏检查您的数据库(PostGreSQL在这里使用&#34; Spout&#34;)在你定义的表格上,并将结果推送到redis中(在#34; Bolt&#34;中)。但是,它有很多功能,但如果你有很多改进,它会比基本脚本更灵活,它应该具有很强的弹性和可扩展性。

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

如果你能等待&#34;再多一点,你可以定义一个定期的lua脚本来检查PostGreSQL并将更新的值放在redis中。 Lua很好,因为有PostGreSQL和Redis的客户端,但许多其他语言也适合。 Lua也可以在redis中使用&#34; eval&#34;命令所以使用相同的语言应该是好的。

您还可以查看ETL解决方案,有很多。

小心同步:Redis只有乐观锁定,如果你需要悲观(在网络上争用等等)你要么定义自己的锁(在#34中有例子; Redis in Action&#34; book) ,要么使用Lua脚本(Redis是单线程的:当执行lua脚本时,不会同时执行任何其他操作)。

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