我有一个Aerospike缓存由一系列的数据与json值一样的结构。示例值:{"name": "John", "count": 10}我在徘徊,如果有可能只为计数字段设置过期时间,并在一段时间后重置它。
{"name": "John", "count": 10}
jhdbpxl91#
Aerospike不支持这种功能。你必须编写代码(因此我猜你的另一篇文章是:您可以添加过滤器,使其仅基于记录的元数据(记录的最后更新时间,可通过表达式访问)或任何其他逻辑来执行此操作,然后让后台操作查询来执行此工作,这应该是超级高效和性能的。
bttbmeg02#
另一种方法是在bin数据中添加您自己的自定义到期时间戳,如下所示:{"name":"John", "count":10, "validTill":1672563600000000000} .在这里,我使用如下格式(您可以使用不同的未来时间戳格式):
{"name":"John", "count":10, "validTill":1672563600000000000}
$ date --date="2023-01-01 09:00:00" +%s%N 1672563600000000000
现在,当你读取记录时,读一个表达式,如果你当前的时钟落后于 validTill,则返回 count = 10,否则返回0。如果你只关心读取时的 count 值,这是可行的。同样,当你在未来的写操作中更新计数值时,你可以使用相同的表达式逻辑来更新 count 和 validTill。如果这对您有效,您就不必使用后台作业扫描和更新记录。
2条答案
按热度按时间jhdbpxl91#
Aerospike不支持这种功能。你必须编写代码(因此我猜你的另一篇文章是:您可以添加过滤器,使其仅基于记录的元数据(记录的最后更新时间,可通过表达式访问)或任何其他逻辑来执行此操作,然后让后台操作查询来执行此工作,这应该是超级高效和性能的。
bttbmeg02#
另一种方法是在bin数据中添加您自己的自定义到期时间戳,如下所示:
{"name":"John", "count":10, "validTill":1672563600000000000}
.在这里,我使用如下格式(您可以使用不同的未来时间戳格式):
现在,当你读取记录时,读一个表达式,如果你当前的时钟落后于 validTill,则返回 count = 10,否则返回0。如果你只关心读取时的 count 值,这是可行的。同样,当你在未来的写操作中更新计数值时,你可以使用相同的表达式逻辑来更新 count 和 validTill。
如果这对您有效,您就不必使用后台作业扫描和更新记录。