首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的自定义缓存实现

Java中的自定义缓存实现
EN

Stack Overflow用户
提问于 2016-06-30 08:07:42
回答 1查看 4.5K关注 0票数 2

我希望在Java中实现某种轻量级缓存,这种缓存在Java中很容易集成,并且应该易于与Java应用程序一起部署。

缓存层将位于应用程序和数据库层之间:没有数据库缓存,没有Spring,没有Hibernate,没有EHcache,没有http缓存。

我们可以使用文件系统或nano数据库来恢复缓存,以便在进程重新启动后恢复缓存。

我试过LRU缓存:

http://stackoverflow.com/questions/224868/easy-simple-to-use-lru-cache-in-java

http://www.programcreek.com/2013/03/leetcode-lru-cache-java/

但是,我不知道如何在溢出后将数据库保存到数据库中(哪个数据库更适合用于更快的数据插入和查找)。还是我应该用文件系统?

有谁有更好的输入来实现Java的缓存机制?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-30 10:03:19

但是,我不知道如何在溢出后将数据库保存到数据库中(哪个数据库更适合用于更快的插入和查找确定的数据),还是应该使用文件系统?

这取决于用例。如果缓存的值非常大,则可以将每个值存储在文件中,并使用缓存键的散列作为文件名。

如果您的值很小,那么将它们作为单独的文件存储将需要大量开销,所以最好将缓存的条目存储到一个或两个文件中。要实现这一点,您需要了解“外部索引”和“内存管理”或“空闲空间管理”(例如最佳匹配、下一次匹配和压缩策略)。这实际上导致了一个小型数据库的实现,因此可以使用一个:)我脑海中浮现的一些东西: LevelDB、MapDB、LMDB、RocksDB

请记住,缓存操作同时来自应用程序,因此缓存可能会删除一个值,而对同一键的请求可能同时出现。您是只实现Cache.getCache.put之类的基本操作,还是实现CAS--像Cache.putIfAbsent这样的操作?您想要有效地使用多核系统,因为它们在今天很常见吗?

然而,当使用一个小型数据库时,您将需要为几个月的工程工作做准备。

有谁有更好的输入来实现Java的缓存机制?

您可以在cruftex.net上阅读我的博客,以获得更多的输入,以便在Java中实现轻量级和快速缓存。

对于带有溢出的缓存实现,您可以查看imcache。但是imcache不是一个完全成熟的泛型缓存,因为例如缺少CAS-操作,请参阅高速缓存接口

我自己的高性能Java实现cache2k,具有CAS-操作、事件、加载器和写入器、过期等特性,它最终也会溢出到磁盘。但是,我不确定时间范围.当您有兴趣在这方面工作:欢迎您的贡献!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38117367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档