当前位置:  开发笔记 > 编程语言 > 正文

轻量级Java对象缓存API

如何解决《轻量级Java对象缓存API》经验,为你挑选了6个好方法。

EHCache非常好.您可以创建内存缓存.查看他们的代码示例,了解创建内存缓存的示例.您可以指定最大尺寸和生存时间.

EHCache确实提供了一些高级功能,但如果您对使用它们不感兴趣 - 请不要.但如果您的要求发生变化,很高兴知道他们在那里.

这是一个内存缓存.在代码中创建,没有配置文件.

CacheManager cacheManager = CacheManager.getInstance();
int oneDay = 24 * 60 * 60;
Cache memoryOnlyCache = new Cache("name", 200, false, false, oneDay, oneDay);
cacheManager.addCache(memoryOnlyCache);

创建一个可容纳200个元素的缓存,其ttl为24小时.



1> Steve K..:

EHCache非常好.您可以创建内存缓存.查看他们的代码示例,了解创建内存缓存的示例.您可以指定最大尺寸和生存时间.

EHCache确实提供了一些高级功能,但如果您对使用它们不感兴趣 - 请不要.但如果您的要求发生变化,很高兴知道他们在那里.

这是一个内存缓存.在代码中创建,没有配置文件.

CacheManager cacheManager = CacheManager.getInstance();
int oneDay = 24 * 60 * 60;
Cache memoryOnlyCache = new Cache("name", 200, false, false, oneDay, oneDay);
cacheManager.addCache(memoryOnlyCache);

创建一个可容纳200个元素的缓存,其ttl为24小时.


EHCache是​​仅引用该对象还是序列化然后反序列化该对象?
EHCache是​​重量级的解决方案吗?我们正在研究现有的缓存解决方案,以在Android上实现API缓存.
这对Android来说太沉重了.我正在使用Kitty缓存,它非常完美!

2> Joachim Saue..:

我非常喜欢Google Guava(API)MapMaker附带的内容

JavaDoc有一个非常简洁的例子,展示了它的易用性和强大功能:

ConcurrentMap graphs = new MapMaker()
   .concurrencyLevel(32)
   .softKeys()
   .weakValues()
   .expiration(30, TimeUnit.MINUTES)
   .makeComputingMap(
       new Function() {
         public Graph apply(Key key) {
           return createExpensiveGraph(key);
         }
       });

此外,番石榴10.0版本引入了更广泛的com.google.common.cache包.


哦,太棒了.

3> Travis Reede..:

您还可以在以下位置查看名为KittyCache的小缓存库:

https://github.com/treeder/kitty-cache

与ehcache有一些性能基准.

它在SimpleJPA项目中用作二级缓存.



4> Bohemian..:

Guava的MapMaker已被其CacheBuilder类所取代.



5> JeeBee..:

您可以查看LinkedHashMap以实现没有第三方jar的简单缓存:

    Map  cache = new LinkedHashMap(MAX_ENTRIES + 1, .75F, true) {

        public boolean removeEldestEntry(Map.Entry eldest) {
            return size() > MAX_ENTRIES;
        }
    };

然后你就可以从缓存中获得

    Foo foo = cache.get(key);
    if (foo == null && !cache.containsKey(key)) {
        try {
            FooDAO fooDAO = DAOFactory.getFooDAO(conn);
            foo = fooDAO.getFooByKey(key);
            cache.put(key, foo);
        } catch (SQLException sqle) {
            logger.error("[getFoo] SQL Exception when accessing Foo", sqle);
        }
    }

休息时留给读者锻炼:)


我认为这种方法不具备TTL容量.不过,这将是一个很好的开始.

6> Ichorus..:

JCS是经过验证的.尽管就缓存机制而言很轻松,但您可能会深入了解实际代码并模仿他们使用HashMap做的事情,以确切地了解您的需求而不是更多.你似乎很清楚你在寻找什么.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有