AppEngine Memcache 过期策略

2023-12-06

我期待以下 AppEngine 代码:

MemcacheService memcache = MemcacheServiceFactory.getMemcacheService();
memcache.put("Foo", "Bar", Expiration.onDate(new Date(1)));
System.out.println(memcache.get("Foo"));
System.out.println(memcache.put("Foo", "Baz", null, SetPolicy.ADD_ONLY_IF_NOT_PRESENT));

产生以下输出:

null
true

IE。通过在将条目放入缓存时设置 1970 年的到期日期,我希望它会立即被删除并可供重用。

相反,我得到:

Bar
false

IE。该条目仍然存在。

现在,奇怪的是,如果我将代码更改为Expiration.onDate(new Date())(没有1),即在执行 put 操作之前将到期时间设置为正确,我do得到预期的“null,true”。

Memcache 是否以某种方式将过去太久的过期日期解释为相对于现在而不是绝对的???但即使这样也不符合结果,因为当 get 到来时,put 的 1ms 应该仍然已经过期了?!?

我可以将“过期”设置为什么值,以保证看跌条目立即过期(并删除!)?请记住,仅使用当前时间戳可能无法可靠地工作,因为 AppEngine 不提供任何跨服务器的时钟同步保证!

我知道这样做乍一看听起来很荒谬(为什么不直接删除它?),但我想在这里使用它:AppEngine Memcache 原子获取和删除(“结论”上方的句子)。


哇!这很晦涩,但我明白了:

看看AsyncMemcacheServiceImpl.java 中 doPut() 方法的源代码,第 505 行内容如下:

itemBuilder.setExpirationTime(expires == null ? 0 : expires.getSecondsValue());

And Expiration.getSecondsValue()包含以下行:

return (int) (getMillisecondsValue() / 1000);

换句话说:过期值为“0”相当于没有过期(与null),并将过期时间除以 1000 转换为秒。

所以,如果我设置 1 毫秒的过期时间,它就会变成 0 秒(除以 1000 时向下舍入),这相当于没有过期时间...Blah!!!

所以,答案是:Expiration.onDate(new Date(1000))应该立即过期,除非 memcache 服务器仍然生活在 60 年代......:) 尝试过。作品。完毕...

(这些测试是在 DevServer 上完成的。我希望生产服务器的行为也相同。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AppEngine Memcache 过期策略 的相关文章

随机推荐

  • 我如何知道空指针异常源自何处?

    我在制作黑莓应用程序时遇到问题 我发现有人制作了一个教程 它做了我尝试过的事情 我复制了教程应用程序的代码来尝试重新创建它 只是为了看看它的实际效果 结果 空指针异常 我想知道是什么触发了这个 我怎么能够 如果您捕获 Throwable 而
  • 如何在 Google Apps 脚本下的 Browser.msgBox 中将文本加粗

    我将以下 Google 脚本链接到一个工作表 function onOpen var text aux texto bold Browser msgBox AVISOS n n1 Prazo impreter vel text aux pa
  • JSP 如何缩放图像?

    有没有办法缩放图像然后在jsp页面中显示 当检索和显示图像时 我想以相同的尺寸显示所有照片 有什么API可以做到吗 我从谷歌搜索过 我发现那些是关于使用 Takeit 缩放图像的 但不能在网络应用程序中工作 您可以使用内置的Java 2D
  • 链接GLEW和其他,_glViewport是唯一未解决的

    我正在使用 G 将我的项目链接到 glew32 glfw opengl32 glu32 等 一切都编译得很好 但是在链接阶段 除了 glViewport 之外的所有内容都链接 我收到此错误 对 glViewport 的未定义引用 我觉得这
  • 如何在流数据集中加载 tar.gz 文件?

    我想从 tar gzip 文件 tgz 进行流式处理 其中包括我实际的 CSV 存储数据 当我的数据以 CSV 文件形式出现时 我已经成功地使用 Spark 2 2 进行结构化流处理 但实际上 数据以 gzipped csv 文件形式出现
  • MySQL GROUP BY 优先

    是否可以使用 GROUP BY 并优先选择记录 例如 我有一大堆联系人数据 可能包含也可能不包含所有信息 在 CSV 意义上 如果可能如下所示 Test User Address1 Address2 email protected emai
  • QML 虚拟键盘隐藏按钮不起作用

    如果我点击键盘 我会遇到问题hide按钮 以下是代码 import QtQuick 2 6 import QtQuick Window 2 2 import QtQuick Controls 2 2 import QtQuick Virtu
  • jQuery 限制显示的元素数量,例如 5

    我可以这么说 ol li Content1 li li Content2 li li Content3 li li Content4 li li Content5 li li Content6 li li Content7 li li Co
  • Matlab 用随机元素生成矩阵

    如何生成一个带有布尔元素的矩阵 但每行的总和等于某个常数 每一行都有相同的数字吗 k 5 m 10 n 10 I sort rand m n 2 M I lt k 如果您不想要相同数量的1每行都有一个 s 而是有一个向量指定每行有多少个1如
  • 麻木。将一个数组中的所有向量行与同一数组中的所有其他向量行进行比较

    我有一个 numpy 数组 如下所示 a array 2 3 0 2 并希望使用 np greater 将每行中的 向量 与其他行进行比较 因此 array False False lt 2 3 compared with 2 3 True
  • 了解 Dean Edwards 的 addevent JavaScript

    我需要帮助理解这段代码 重点是什么handler guid 为什么需要哈希表 重点是什么 if element on type handlers 0 element on type 文中的 这个 指的是什么handleEvent 元素还是a
  • 在 PHP 中分割文本文件

    如何使用 PHP 按字符数将大型文本文件拆分为单独的文件 因此 一个 10 000 个字符的文件每 1000 个字符就会被拆分为 10 个文件 此外 只有在找到句号后才可以拆分吗 Thanks 更新 1 我喜欢 zombats 代码 我删除
  • 单元测试适配器抛出异常:不支持 URI 格式

    在 Visual Studio 2010 中 当我使用以下基本代码创建默认测试项目时
  • 让 PowerShell 等待 Excel 完成刷新数据透视表

    所以我开发了一个Powershell脚本来刷新大约40个大的excel文件并保存它们 在这个脚本中我运行一个excel宏来传递excel ODBC 连接参数 然后在刷新完成后从excel文件中删除它们 我唯一的问题是 对于这 40 个文件中
  • qmake 和多个 MSVS 版本

    From Visual Studio 2008 Command Prompt我运行这个命令来生成 vcproj file gt qmake spec win32 msvc2008 并收到警告消息 WARNING Generator MSVC
  • LINQ连接多表

    我有4张桌子 table1 id1 fk tbl2 this is the foreign key to the id in table2 table2 id2 fk tbl3 this is the foreign key to the
  • 如何让gganimate中的点出现而不是过渡

    我正在使用 gganimate 假设我有这个 MWE library ggplot2 library gganimate ggplot airquality aes Day Temp geom point color red size 1
  • 有没有办法以编程方式检测用户何时在浏览器中按下 F5 按钮?

    我有一个缓存 每当用户在浏览器中发出 F5 请求时 我都希望该缓存失效 我正在运行 JSF 2 0 应用程序 有没有办法做到这一点 Use the FacesContext getCurrentInstance isPostBack 检查页
  • 解析 YAML 文件

    这是我第一次使用 YAML 文件 所以我首先想到的是找到任何可以帮助我解析文件的库 我找到了两个库 YamlBean 和 SnakeYAML 我不确定我要使用哪一个 这是我尝试解析的文件的示例 users user1 groups Prem
  • AppEngine Memcache 过期策略

    我期待以下 AppEngine 代码 MemcacheService memcache MemcacheServiceFactory getMemcacheService memcache put Foo Bar Expiration on