Synchronize Redis with Postgresql



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

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

我的应用程序栈有PostgreSQL和Ruby on Rails。

这取决于你的时间限制。它是实时的吗?+- 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触发器,看看你是否可以定义一些,并从它们调用脚本

最新更新