首页 文章

如何在airospike中修改ttl为-1的所有记录的TTL?

提问于
浏览
3

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

1 回答

  • 4

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

    With Predicate Filtering:

    如果您正在使用JavaCC#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();
    

    Only using UDFs

    对于尚未进行谓词过滤的其他客户端(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
    

相关问题