我使用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的树集进行密钥到期吗?
答案 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无法为地图中的键设置过期时间。