rocksdb - 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();
}
}
解决方案
仅在压缩中删除过期的 TTL 值:(Timestamp + ttl < time_now)