MapDb树集密钥不带有过期属性

时间:2018-08-09 10:24:57

标签: java treeset mapdb

我使用mapdb的直接内存作为我的堆外内存。因为我的应用程序中有很多sortedset,所以我使用了mapdb树集缓存机制来存储我的值。

代码如下:

@PostConstruct
private void initDbEngine() {
    try {
        dbEngine = DBMaker
                .memoryDirectDB()
                .closeOnJvmShutdown()
                .concurrencyScale(16)
                .make();
        logger.error("dbEngine init ok...");
    } catch (Exception ex) {
        logger.error(OffheapCacheConst.PACKAGE_CONTAINER, ex);
        throw ex;
    }
}



private SortedSet initSortedSetContainer(String containerName) {
    try {
        SortedSet sortedSet = dbEngine
                .treeSet(containerName)
                // why below three properties not exist????
                //.expireAfterCreate(86400 * 30 * 12, TimeUnit.SECONDS)
                //.expireAfterUpdate(86400 * 30 * 12, TimeUnit.SECONDS)
                //.expireAfterGet(86400 * 30 * 12, TimeUnit.SECONDS)
                .maxNodeSize(16)
                .createOrOpen();
        return sortedSet;
    } catch (Exception ex) {
        logger.error(OffheapCacheConst.PACKAGE_CONTAINER, ex);
        throw ex;
    }
}

但是,当我尝试找到expireAfterCreate/expireAfterUpdate/expireAfterGet property时,却一无所获。只是想知道为什么树集没有附加这些属性?

还有其他想法可以让我使用mapdb的树集进行密钥到期吗?

1 个答案:

答案 0 :(得分:0)

最后,我们放弃使用mapdb作为offheap缓存的选项,因为它的性能不符合我们的要求。我已经用ohc完成了基准测试,结果如下:

Benchmark                     Mode  Cnt       Score       Error  Units
OhcBenchmark.testOhcGet      thrpt   20  923806.733 ± 19007.928  ops/s
OhcBenchmark.testOhcHGet     thrpt   20  242194.462 ± 11365.323  ops/s
OhcBenchmark.testOhcHGetAll  thrpt   20  265504.651 ± 15110.371  ops/s
OhcBenchmark.testOhcHSet     thrpt   20  204028.508 ± 59620.923  ops/s
OhcBenchmark.testOhcSAdd     thrpt   20   10097.188 ±   607.277  ops/s
OhcBenchmark.testOhcSet      thrpt   20  417034.685 ± 69965.252  ops/s
OhcBenchmark.testOhcSmember  thrpt   20  329536.900 ± 15128.885  ops/s
OhcBenchmark.testOhcZAdd     thrpt   20  222422.422 ± 33836.662  ops/s
OhcBenchmark.testOhcZRange   thrpt   20  155268.857 ±  5373.339  ops/s


Benchmark                              Mode  Cnt      Score      Error  Units
MapdbCacheBenchmark.testMapdbGet      thrpt   20  43376.407 ± 6046.811  ops/s
MapdbCacheBenchmark.testMapdbHGet     thrpt   20  45982.205 ± 2212.897  ops/s
MapdbCacheBenchmark.testMapdbHGetAll  thrpt   20  48149.936 ± 1819.886  ops/s
MapdbCacheBenchmark.testMapdbHSet     thrpt   20  18269.013 ± 1133.118  ops/s
MapdbCacheBenchmark.testMapdbSAdd     thrpt   20    246.944 ±   31.502  ops/s
MapdbCacheBenchmark.testMapdbSet      thrpt   20  28922.292 ± 1618.363  ops/s
MapdbCacheBenchmark.testMapdbSmember  thrpt   20  50328.641 ± 3519.970  ops/s
MapdbCacheBenchmark.testMapdbZAdd     thrpt   20  14729.551 ±  658.754  ops/s
MapdbCacheBenchmark.testMapdbZRange   thrpt   20  37038.027 ± 1795.458  ops/s

此外,ohc支持密钥过期,这就是我们需要的。 Mapdb无法为地图中的键设置过期时间。