Groupcache: 如何模拟过期时间

创建于 2013-07-29  ·  3评论  ·  资料来源: golang/groupcache

我注意到在设计决策Setting and expiration time中被遗漏了。 我想这是因为您对如何模拟此功能有一个想法。

我想到的用例是在 Web 应用程序前面构建一个缓存的反向代理。 我知道页面应该缓存 X 分钟。

您能否详细说明您将如何处理这个问题?

(不确定这是提问的正确地方。)

最有用的评论

据我了解 groupcache 的设计,你不能使缓存项失效或更新。这个特性被遗漏了,因为它在分布式系统中非常困难,并且需要昂贵的共识算法(例如 paxos)。

但是,您可以通过在缓存键本身中编码时间信息,每 X 分钟生成一个唯一的缓存键。 例如,“foo-12:30”可能会在 12:30 的时间唯一地描述项目“foo”。 然后,您的应用程序可以访问此项目,直到 12:40。 此时,可能会生成一个新项目“foo-12:40”,一旦客户端停止访问,旧项目(“foo-12:30”)最终将过期。

如果您的分布式应用程序能够以一致的方式更新和检索修订号(例如,您可以使用 doozerd、zookeeper 或您选择的数据库解决方案来做到这一点),您还可以将此修订号编码为缓存键的一部分。 或者,您也可以使用“Last-Modified”或“ETag”HTTP 标头作为 Web 代理中的某种修订号。

所有3条评论

据我了解 groupcache 的设计,你不能使缓存项失效或更新。这个特性被遗漏了,因为它在分布式系统中非常困难,并且需要昂贵的共识算法(例如 paxos)。

但是,您可以通过在缓存键本身中编码时间信息,每 X 分钟生成一个唯一的缓存键。 例如,“foo-12:30”可能会在 12:30 的时间唯一地描述项目“foo”。 然后,您的应用程序可以访问此项目,直到 12:40。 此时,可能会生成一个新项目“foo-12:40”,一旦客户端停止访问,旧项目(“foo-12:30”)最终将过期。

如果您的分布式应用程序能够以一致的方式更新和检索修订号(例如,您可以使用 doozerd、zookeeper 或您选择的数据库解决方案来做到这一点),您还可以将此修订号编码为缓存键的一部分。 或者,您也可以使用“Last-Modified”或“ETag”HTTP 标头作为 Web 代理中的某种修订号。

是的,tux21b 所说的。 (至少目前是故意遗漏的)。

感谢@tux21b关于修改的建议!

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

orcaman picture orcaman  ·  9评论

cowboyrushforth picture cowboyrushforth  ·  5评论

abennett picture abennett  ·  3评论

AlexanderChen1989 picture AlexanderChen1989  ·  6评论

gplume picture gplume  ·  3评论