在每个请求上获取memcache变量会导致问题

时间:2011-10-22 17:24:16

标签: java google-app-engine

我正在使用GAE内存缓存来获取每个请求的布尔值。此布尔值是启用/禁用特定URL的标志。

如果它是真的,一切正常,如果它是假的,那么它会发回一个特定的格式响应。

该服务每秒处理大约7个请求,问题是Google似乎已经限制了访问内存缓存,现在这个提取在几天前以每秒1个请求的速度一致地失败,所以这个过程已经成为完全不可靠。我不得不做一个紧急补丁从代码中删除此检查。但我需要一个替代例程来启用/禁用该服务。

使用servlet实例变量是一个选项,但每个jvm实例都有自己的实例,因此它无法工作。

有人可以建议这样做吗?

2 个答案:

答案 0 :(得分:1)

对于访问内存缓存的频率,没有限制(除了健全性检查)。但无论如何,你永远不应该只依靠memcache来存储一个值;您应始终回退到永久存储机制,例如数据存储区。

答案 1 :(得分:0)

为了保持一致性,使用数据存储区/事务而不是内存缓存可能更好。

要减少数据存储区/事务的延迟,您可以尝试混合使用memcache和数据存储区/事务方法。例如

# while reading status 
# 1. try to read from memcache
# 2. if memcache exists, return the value
# 3. if not, read from datastore, save to memcache, and return

# while writing status
# 1. use a transaction to write data to datastore and memcache