【问题标题】:Developers Console showing stale memcache results?开发人员控制台显示陈旧的内存缓存结果?
【发布时间】:2015-01-06 10:27:27
【问题描述】:

[我认为这是 Developers Console 的问题,而不是编程问题,但 Google 将我推荐给 stackoverflow。]

Compute/App Engine/Memcache 选项卡上的 Memcache 结果似乎已过时。查看“缓存中的项目”(3 个)和列表中的项目(14 个)。在我“刷新缓存”之后,列表中仍然有项目,但是当我在“刷新缓存”之后在列表中“查找键”时,没有返回任何内容。这意味着,memcache 似乎按预期运行,但网站似乎显示过时的结果。

同样的问题出现在 Chrome 和 IE 中。即使我重新加载页面和/或刷新浏览器缓存,该站点仍会显示陈旧的结果。任何解决方法?还是我忽略了什么?

--

现在变得有趣了!我刷新了 memcache 并添加了一项,但根据控制台,我在缓存中有 3 个项目,列表中显示的单个项目负责 250% 的所有流量,哈哈。 @Google,这是正式版还是测试版?

【问题讨论】:

  • 感谢您的报告;我们正在调查此事。

标签: google-app-engine caching


【解决方案1】:

TL;DR 密钥列表是过去一小时左右的密钥活动的近似值。它不是缓存当前状态的表示 - 因此它可能与“缓存中的项目”计数不匹配。

更多细节...

App Engine 开发人员在这里。感谢 Oliver 指出这个问题,你说得对,输出令人困惑,我们需要修复输出或它所代表的解释。

这就是问题所在。显示的键列表从来都不是缓存当前状态的准确反映,尤其是对于小型缓存。它旨在让您了解您的“最热”键是什么,并且它实际上仅适用于具有数百万或数十亿键的应用程序,这些键可能有一些热键会有效地阻止内存缓存扩展。

当您从 App Engine 购买更多专用内存缓存时,您不仅购买了更多 GB 的内存,还购买了更多的吞吐量(每购买 1 GB,您每秒可以获得大约 10k 键操作)。但是,只有在您的密钥在其活动中分布良好时,您才能利用您购买的所有吞吐量。如果您有几个热键,那么它们可能会使您的部分内存缓存过载,从而导致过多的延迟或错误率。

因此,为了帮助确保大型应用能够有效地扩展内存缓存,我们显示了这个最热门键的列表。为大规模分布的操作计算精确的“前 K”键列表非常昂贵,因此我们进行了一些近似,其中之一是在一小时的时间段内进行计算。

这些近似值适用于处于稳定状态的大型应用程序(这是我们的目标),但正如您所发现的,当应用程序的活动和内容发生变化时,它们可能会为小型应用程序产生异常结果。

这些小型应用程序的异常结果是我们的疏忽,我将提交一个内部错误来解决它。可能我们只是在用户界面中添加了一些文本,以明确该列表是过去一个小时左右的关键活动的近似值,而不是缓存当前状态的表示。

【讨论】:

  • 我可以提个建议吗?我确实了解后果,我想知道 Google 如何查询如此大量的键。我相信这个列表应该有两个目的:在编写一个只有少数键的新应用程序时,如果可以查找确切的键,它将使调试变得更加容易。一旦应用程序投入生产,您所描述的内容就有意义了。我们不能两者兼得吗?要么在一定数量的按键/音量下切换模式,要么让管理员切换调试。
  • 是的,当使用少量数据进行调试以查看缓存的精确表示时,它确实非常有用。我已将您对“小缓存模式”的建议添加到我们的内部错误中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 2015-11-07
相关资源
最近更新 更多