【问题标题】:Aerospike TTL updatesAerospike TTL 更新
【发布时间】:2018-03-05 16:53:48
【问题描述】:

我正在尝试使用 python 客户端将 .put() 更新到 Aerospike 中的现有记录中。

我很高兴发现您实际上可以放入现有记录而不更新 TTL,如下所示(元参数):https://www.aerospike.com/apidocs/python/client.html?highlight=ttl#aerospike.Client.put。我曾经通过读取 TTL 然后在新的 put 上重新设置它来做到这一点。

但是,我发现当您使用 aerospike.TTL_DONT_UPDATE 选项时,TTL 会重置为命名空间上设置的冷启动-驱逐-ttl。如何避免这种情况并保持之前的 TTL 不变?

交叉发布到 Aerospike 论坛:https://discuss.aerospike.com/t/aerospike-ttls-on-put/4993

【问题讨论】:

  • 如果您要交叉发帖,链接到其他帖子[s] 是一种很好的礼仪。这有助于避免将来出现“古人的智慧”问题。 discuss.aerospike.com/t/…

标签: aerospike ttl


【解决方案1】:

不发布示例代码相当于“错误报告”,相当于上完厕所后不洗手。如果您只提供服务器版本和 Python 客户端版本,也会有所帮助。

ttl-test.py

from __future__ import print_function
import aerospike
import sys
from aerospike import exception as e
from time import sleep

config = { 'hosts': [ ('127.0.0.1', 3000) ] }

try:
    client = aerospike.client(config).connect()
except ex.ClientError as e:
    print("Error: {0} [{1}]".format(e.msg, e.code))
    sys.exit(1)

key = ('test', 'demo', 'foo')

try:
    # Write a record
    client.put(key, {
        'name': 'Hey Joe',
        'age': 66
        }, meta={'ttl': 4})
except ex.RecordError as e:
    print("Error: {0} [{1}]".format(e.msg, e.code))
client.put(key, {'z': 26}, meta={'ttl': aerospike.TTL_DONT_UPDATE})

try:
    (key, meta) = client.exists(key)
    print(meta)
except ex.RecordError as e:
    print("Error: {0} [{1}]".format(e.msg, e.code))

sleep(5)

try:
    (key, meta) = client.exists(key)
    print(meta)
except ex.RecordError as e:
    print("Error: {0} [{1}]".format(e.msg, e.code))

client.close()

现在来测试一下:

$ python ttl-test.py 
{'gen': 2, 'ttl': 4}
None

似乎有效。请注意,我使用的是服务器版本 >= 3.10.1

【讨论】:

  • 抱歉,完全相同的代码在 aerospike 2.2.3 上的工作方式不同,尽管根据文档应该。
  • 你说的是 Aerospike 的 Python 客户端的 release 2.2.3 吗?实际上这个常量是用release 2.0.6 添加的,但你需要让你的客户端与版本>= 3.10.1的服务器通信
  • 我明白了,这解释了它并为围绕此的混乱道歉。我忽略了服务器的版本,所以我想这就是我的问题所在。
猜你喜欢
  • 1970-01-01
  • 2017-01-10
  • 2022-11-13
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多