aerospike如何修改ttl为-1的所有记录集的TTL?
How to modify the TTL of all records set with a ttl of -1 in aerospike?
我想修改所有意外设置为 'never expire' TTL(客户端为 -1)的记录的 TTL。我该怎么做?
澄清一下,设置一个 TTL of -1 in the client means never expire (equivalent to a default-ttl
of 0 in the server's aerospike.conf 文件),而在客户端中将 TTL 设置为 0 意味着 继承此命名空间的默认 ttl。
使用谓词过滤:
如果您使用的是 Java, C, C# and Go clients the easiest way to identify the records with a void time of 0 would be to use a 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
我想修改所有意外设置为 'never expire' TTL(客户端为 -1)的记录的 TTL。我该怎么做?
澄清一下,设置一个 TTL of -1 in the client means never expire (equivalent to a default-ttl
of 0 in the server's aerospike.conf 文件),而在客户端中将 TTL 设置为 0 意味着 继承此命名空间的默认 ttl。
使用谓词过滤:
如果您使用的是 Java, C, C# and Go clients the easiest way to identify the records with a void time of 0 would be to use a 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