1

我想在任何给定时间获取“活动”键的数量。现在根据 API 文档 getItemCount() 意味着返回这个。

然而事实并非如此。过期键不会减少 getItemCount() 的值。为什么是这样?如何准确计算所有未过期的“活动”或“活动”密钥?

这是我的放置代码;syncCache.put(uid, cachedUID, Expiration.byDeltaSeconds(3), SetPolicy.SET_ALWAYS);

现在应该在 3 秒后过期密钥。它使它们过期,但 getItemCount() 不反映键的真实计数。

更新:似乎 memcache 可能不是我应该使用的,所以这就是我想要做的。

我希望编写一个 google-app 引擎服务器/应用程序,作为桌面应用程序的“在线用户”功能。桌面应用程序使用唯一 ID 作为参数向应用程序发出 http 请求。应用程序将此 UID 与时间戳一起存储。这是每 3 分钟完成一次。

每 5 分钟删除时间戳超出 5 分钟窗口的任何条目。然后你计算你有多少条目,这就是有多少用户“在线”。

过期功能似乎很完美,因为那时我什至不需要担心时间戳或清除过期条目。

4

2 回答 2

0

这可能是文档中的一个问题,python 没有提到任何关于活着的。这在 python 中也是可重现的。

另请参阅此相关帖子memcached 中的延迟过期机制如何运作?.

于 2012-07-02T22:02:09.603 回答
0

getItemCount() 可能会返回过期的键,因为它是 memcache 和许多其他缓存的工作方式。

Memcache 可以帮助您做您描述的事情,但不是您尝试做的方式。考虑完全相反的情况:您将在线用户放在 memcache 中,然后 appengine 由于缺少可用内存而将其从 memcache 中清除。缓存不会为您提供任何保证您的项目将在任何特定时期存储。因此,memcache 可以让您减少对数据存储的请求数量和延迟。

其中一种方法是:维护存储在数据存储中(或者如果您不需要非常精确,则在内存缓存中)的排序映射(用户 ID、上次登录刷新)条目。在每次登录/刷新时,您都会通过特定键更新值,并从定期 cron-job 中删除地图中的旧用户。因此地图的大小将是特定时刻登录使用的数量。

确保 map 适合 1 Mb,这是 memcache 或数据存储的限制。

于 2012-07-07T16:56:13.350 回答