我有数百万行要从数据库中读取,多个用户每天都会来读取相同的数据。所以我想创建一个缓存。所以我不必再次访问数据库以获取相同的数据。
我见过很多选择,但无法找出使用哪种方法。
创建我自己的缓存我正在考虑保存查询结果的数据并写入文件或
在内存缓存中使用某些第三方?
Guava CacheBuilder,LRUMap缓存,whirlycache,cache4j。
答案 0 :(得分:1)
您不是第一个有这样要求的人,这就是为什么有许多缓存实现可用作开源项目,甚至是一组标准的Java API用于缓存(JCache)。如果您的需求超出了这些解决方案,甚至有商业解决方案可以跨RAM,闪存,数据库等透明地处理数十TB的数据。如果这些都不够,那么您一定要自己编写。
答案 1 :(得分:0)
完全依赖于多种因素。我认为答案将基于环境,数据大小等等,这里是要点
您希望尽可能多地将缓存保留在ram中,因为它比文件系统更快地访问。
您还可以使用操作系统内存映射文件来平衡访问与利用率。我建议任何经过验证的解决方案,而不是创建自己的
如果你的内存不足,那么你可能需要问一些更重要的问题,比如缓存顶级访问数据,因为客户最有可能会这样做。
所以没有确定或明确的答案,但你必须根据你的约束来决定。希望这有帮助
答案 2 :(得分:0)
我认为你是过度设计这个问题,编写一个高性能的透明缓存并不是一件容易的事,除非你只需要一个简单的HashMap来保存一些值。您应该专注于编写代码来解决您的域问题,而不是编写太多的框架代码。
停止重新发明轮子,使用内存缓存(例如infinispan或redis)或数据库(例如postgres)。你会有更少的痛苦和更好的表现。