首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Vaadin 8-应用程序范围的缓存

Vaadin 8-应用程序范围的缓存
EN

Stack Overflow用户
提问于 2018-04-19 16:16:14
回答 1查看 455关注 0票数 1

在我的Vaadin 8项目中,每当应用程序启动和运行时,我都会将一些对象保存在主内存中。

为了提高内存效率,我希望为所有用户保留这个缓存--而不是为每个用户提供单独的缓存。因此,缓存应该是每个应用程序,即这些对象的单个集合,而不是每个会话。

如何在Vaadin 8中做到这一点?请注意-在这个系统中没有Spring,所以在Spring上执行它不是一个选择。

原谅一个幼稚的问题。还不太了解Vaadin/web。

EN

Stack Overflow用户

回答已采纳

发布于 2018-04-19 21:41:17

对于应用程序范围的缓存,只需创建一个具有公共静态缓存的类,您可以从任何地方访问该类。静态对象对于每个UI和会话都是相同的。

由于您没有指定要缓存什么,所以我认为您希望缓存由您创建的自定义对象,以便用于某种服务器端逻辑。

要在普通java中这样做,您可以创建一个简单的hashmap作为缓存。一个非常简单的例子是:

代码语言:javascript
运行
复制
public class GlobalCache {

    private static ConcurrentHashMap<String, Object> cacheMap = new ConcurrentHashMap<>();

    public static Object getObject(String key, Function<String, Object> creator) {
        return cacheMap.computeIfAbsent(key, creator);
    }

}

这将不是一个好的缓存,因为它不会使其条目失效。如果你能添加任何库,你应该添加番石榴。番石榴提供了一个很好的缓存实现,您可以使用:

代码语言:javascript
运行
复制
//Add this to your gradle:
dependencies {
    implementation group: 'com.google.guava', name: 'guava', version: '24.1-jre'
}

//And this will become your code
public class GlobalCache {
    private static Cache<String, Object> cache = 
        CacheBuilder.newBuilder().maximumSize(100).expireAfterWrite(5, TimeUnit.MINUTES).build();

    public static Object getObject(String key, Callable<? extends Object> creator) throws ExecutionException {
        return cache.get(key, creator);
    }
}
票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49925756

复制
相关文章

相似问题

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