【问题标题】:how to update cache only when data is changed?仅在数据更改时如何更新缓存?
【发布时间】:2015-01-02 12:39:23
【问题描述】:

当前情景:-

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

要求:-

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

沙发底座:-

我听说过沙发床视图。我对此很陌生。我可以将我的数据从 mysql 更改为 couchbase 中的 JSON 文档。我的问题是,这个沙发底座视图适合吗?

我的想法是

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

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

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

提前致谢。

【问题讨论】:

    标签: performance caching scalability couchbase


    【解决方案1】:

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

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

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

    另一种方法是手动触发沙发基础视图更新。这可以通过使用stale=false 参数或stale=update_after 查询视图来完成。 如果您通过stale=false,视图索引将被更新,您将获得实际数据。如果您有很多文档,此查询可能需要很长时间。 如果您传递stale=update_after,视图将返回当前数据(可能已缓存),并在返回数据后开始索引更新过程。这个查询会很快,但是你可以获得缓存的数据,但是如果你只是想触发更新过程,这种方法就足够了。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-28
      • 2013-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多