如何通知远程用户缓存的数据已过期?

时间:2015-03-10 09:33:14

标签: algorithm web-services caching

我们公司已经建立了一些新的网络服务。这些服务提供了一些大数据,因此最好将数据保存在缓存中以解决性能问题。如果新的或更新数据将在我们的网络服务中提供,我们如何通知我们的用户呢?这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:0)

首先要做的是将到期/有效期限与数据响应一起包括在内。

要做的第二件事是创建一个单独的Web服务方法来检查数据是否在给定日期之后被修改。

答案 1 :(得分:0)

您基本上需要在缓存之间进行权衡,并确保数据有效 - 并将整个数据存储在您的Web服务上。找到正确的解决方案是一个工程问题,实际上取决于您的具体情况,但这里有一些指示和可能的方法:

  1. 缓存中的每个条目都必须具有到期数据,在时间过后将被擦除,它将确保您不存储旧数据,并且您的缓存中没有充满必要的信息。
  2. 一旦某个条目无效,您就可以向所有用户发送消息,他们应该将这些数据从其缓存中取出。这需要您的客户听取您的意见,如果数据经常更改,则会变得效率低下。
  3. 您可以存储每个元素的哈希值,并在使用实际值之前 - 检查哈希数据是否正确。这通常比检查实际值需要的数据传输少得多,但是您可以使用 false negative - 您认为值不会更改,而实际上它是。
  4. 在某些情况下(特别是点对点,但不是唯一),使用Merkele Trees是明智的。如果Merkele树是每个叶子保存数据及其哈希值,并且每个内部节点是其两个儿子的哈希的想法。
    我们的想法是,如果通过检查根的值没有对缓存进行任何更改,并且在O(logN)中找到已更改的内容,则可以非常快速地找到。
    缺点是这个DS是概率性的,并且有一个很小的可能性,一个值被改变,你将无法检测到它。
    这种方法是(3)
  5. 的有效推广

    最终,没有灵丹妙药,所选择的方法应该适合您的具体情况,并且取决于很多因素,有些是:

    • 缓存中的条目大小
    • 缓存更改率
    • 网络服务器可用性
    • 与客户保持联系的可用性
    • 是否有足够的概率方法?