创建缓存我应该使用文件系统还是内存?

时间:2015-09-29 19:55:15

标签: java caching memcached

我有数百万行要从数据库中读取,多个用户每天都会来读取相同的数据。所以我想创建一个缓存。所以我不必再次访问数据库以获取相同的数据。

我见过很多选择,但无法找出使用哪种方法。

创建我自己的缓存我正在考虑保存查询结果的数据并写入文件或

在内存缓存中使用某些第三方?
Guava CacheBuilder,LRUMap缓存,whirlycache,cache4j。

3 个答案:

答案 0 :(得分:1)

您不是第一个有这样要求的人,这就是为什么有许多缓存实现可用作开源项目,甚至是一组标准的Java API用于缓存(JCache)。如果您的需求超出了这些解决方案,甚至有商业解决方案可以跨RAM,闪存,数据库等透明地处理数十TB的数据。如果这些都不够,那么您一定要自己编写。

答案 1 :(得分:0)

完全依赖于多种因素。我认为答案将基于环境,数据大小等等,这里是要点

  1. 您希望尽可能多地将缓存保留在ram中,因为它比文件系统更快地访问。

  2. 您还可以使用操作系统内存映射文件来平衡访问与利用率。我建议任何经过验证的解决方案,而不是创建自己的

  3. 如果你的内存不足,那么你可能需要问一些更重要的问题,比如缓存顶级访问数据,因为客户最有可能会这样做。

    所以没有确定或明确的答案,但你必须根据你的约束来决定。希望这有帮助

答案 2 :(得分:0)

我认为你是过度设计这个问题,编写一个高性能的透明缓存并不是一件容易的事,除非你只需要一个简单的HashMap来保存一些值。您应该专注于编写代码来解决您的域问题,而不是编写太多的框架代码。

停止重新发明轮子,使用内存缓存(例如infinispan或redis)或数据库(例如postgres)。你会有更少的痛苦和更好的表现。