gpt4 book ai didi

lua - 如何修改aerospike中ttl为-1的所有记录集的TTL?

转载 作者:行者123 更新时间:2023-12-02 07:27:11 25 4
gpt4 key购买 nike

我想修改所有意外设置为“永不过期”TTL(客户端中为-1)的记录的 TTL。我该怎么做?

最佳答案

为了澄清,设置 TTL of -1在客户端中设置 TTL 意味着永不过期(相当于服务器的 default-ttl 文件中 aerospike.conf 为 0),而在客户端中设置 TTL 为 0 意味着继承默认 ttl这个命名空间。

使用谓词过滤:

如果您使用 Java , C , C#Go客户识别记录的最简单方法是 void time 0 将使用 predicate filter 。您可以将一个简单的记录 UDF 应用于与谓词过滤器匹配的所有记录。

ttl.lua

function set_ttl(rec, to_ttl)
record.set_ttl(rec, to_ttl)
aerospike:update(rec)
end

使用AQL注册Lua模块:

$ aql
Aerospike Query Client
Version 3.12.0
C Client Version 4.1.4
Copyright 2012-2017 Aerospike. All rights reserved.
aql> register module './ttl.lua'
OK, 1 module added.

然后在 Java 应用程序中:

Statement stmt = new Statement();
stmt.setNamespace(params.namespace);
stmt.setSetName(params.set);
stmt.setPredExp(
PredExp.recVoidTime(),
PredExp.integerValue(0),
PredExp.integerEqual()
);

ExecuteTask task = client.execute(params.writePolicy, stmt, "ttl", "set_ttl", Value.IntegerValue(604800));
task.waitTillComplete();

仅使用 UDF:

对于尚未具有谓词过滤功能的其他客户端(Python、PHP 等),您可以通过应用于扫描的记录 UDF 来完成这一切。过滤逻辑必须位于 UDF 内部。

ttl.lua

function modify_zero_ttl(rec, to_ttl)
local rec_ttl = record.ttl(rec)
if rec_ttl == 0 then
record.set_ttl(rec, to_ttl)
aerospike:update(rec)
end
end

AQL :

$ aql
Aerospike Query Client
Version 3.12.0
C Client Version 4.1.4
Copyright 2012-2017 Aerospike. All rights reserved.
aql> register module './ttl.lua'
OK, 1 module added.

aql> execute ttl.modify_zero_ttl(604800) on test.foo

关于lua - 如何修改aerospike中ttl为-1的所有记录集的TTL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45193957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com