如何在数据更改时更新缓存?

时间:2014-11-06 05:11:12

标签: performance caching scalability couchbase

当前情景: -

我有一个C#代码从MySql服务器获取数据(来自Strored过程的数据)并存储 Redis中JSON格式的数据。这会大约每半小时更新一次缓存(redis),无论mysql中的数据是否保持相同/不同(因为我没有关于数据更改的线索)。

要求: -

需要构建相同的系统,而不是在预定义的时间间隔内更新缓存,即使数据相同,我也只需要在数据更改时修改缓存。

Couchbase: -

我听说过基座视图。我是新手。我可以在couchbase中将我的数据从mysql更改为JSON文档。我的问题是,这个基地观点是否适用于此?

我的想法是

1. Data from MySql       => JSON in couchbase bucket
2. StoredProcedure logic => couchbase views

当来自couchbase存储桶的数据发生更改时,此视图应该再次运行,否则应该从缓存中获取而不再运行视图。这在视图中是否可行?

如果没有,请告诉任何其他解决方案。

提前致谢。

1 个答案:

答案 0 :(得分:2)

在couchbase视图中,可以手动或自动触发更新。

对于自动触发视图更新,您可以通过两种方式执行此操作:基于已更改文档的数量进行定期更新和更新。您可以通过GET查询查看当前设置:http://Administrator:Password@nodename:8091/settings/viewUpdateDaemon 并通过POST请求更新它们。

查看更多详细信息,请参阅Couchbase服务器manual文档。

另一种方法是手动触发couchbase视图更新。这可以通过使用stale=false param或stale=update_after查询视图来完成。 如果您通过stale=false视图索引将更新,您将获得实际数据。如果您有大量文档,此查询可能会花费大量时间。 如果您传递stale=update_after,视图将返回当前数据(可能已缓存),并在返回数据后将启动索引更新过程。此查询速度很快,但您可以获得缓存数据,但如果您只想触发更新过程,这种方法就足够了。

以下是docs的链接以获取更多信息。

所以你应该决定什么方法更适合你,如果你需要立即填充缓存中的更新数据,手动触发会更好。如果您不需要,可以使用自动方法并设置更新触发器,在一定数量的记录更新后运行reindex。