首页 > 解决方案 > RocksDB:如何在 java 中使用 ttl?

问题描述

我正在为 java api 测试rocksdb。我在map中放了一个key-value entry,然后等待20s,然后从map中获取。为什么条目没有被删除?这是我的代码:

import org.rocksdb.Options;
import org.rocksdb.RocksDBException;
import org.rocksdb.TtlDB;

public class Test2 {
    public static void main(String[] args) throws Exception {
        TtlDB.loadLibrary();
        Options options = new Options()
                .setCreateIfMissing(true);


        TtlDB db = TtlDB.open(options, args[0],20,false);
        if(args.length > 3 && "put".equals(args[1])) {
            db.put(args[2].getBytes(), args[3].getBytes());
        }

        byte[] arr = db.get(args[2].getBytes());
        if(arr != null) {
            System.out.println(new String(arr));
        } else {
            System.out.println(arr);
        }
        System.out.println(db.get(args[2].getBytes()));
        Thread.sleep(21000);
        System.out.println(db.get(args[2].getBytes()));
        db.close();
    }
}

标签: rocksdb

解决方案


仅在压缩中删除过期的 TTL 值:(Timestamp + ttl < time_now)

https://github.com/facebook/rocksdb/wiki/Time-to-Live


推荐阅读