Vaadin 8 - 应用程序范围的缓存
Vaadin 8 - application-wide cache
在我的 Vaadin 8 项目中,有一些对象在应用程序启动时保留在主内存中&运行。
为了提高内存效率,我希望为所有用户保留此缓存,而不是为每个用户保留一个单独的缓存。所以缓存应该是每个应用程序,即这些对象的一组,而不是每个会话。
如何在 Vaadin 8 中执行此操作?请注意 - 此系统中没有 Spring,因此无法选择 Spring。
如果问题幼稚,请原谅。对 Vaadin/web dev.
还不是很了解
对于应用程序范围的缓存,只需创建一个 class 和一个 public 静态缓存,您可以从任何地方访问它。每个 UI 和会话的静态对象都是相同的。
由于您没有指定要缓存什么,我想您想要缓存您创建的自定义对象以用于某种服务器端逻辑。
要以简单的方式做到这一点 java,您可以创建一个简单的 hashmap 用作缓存。一个非常简单的例子是:
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);
}
}
这不是一个好的缓存,因为它不会使其条目无效。
如果可以添加任何库,则应该添加 Guava。 Guava 提供了一个很棒的缓存实现,您可以使用:
//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);
}
}
在我的 Vaadin 8 项目中,有一些对象在应用程序启动时保留在主内存中&运行。
为了提高内存效率,我希望为所有用户保留此缓存,而不是为每个用户保留一个单独的缓存。所以缓存应该是每个应用程序,即这些对象的一组,而不是每个会话。
如何在 Vaadin 8 中执行此操作?请注意 - 此系统中没有 Spring,因此无法选择 Spring。
如果问题幼稚,请原谅。对 Vaadin/web dev.
还不是很了解对于应用程序范围的缓存,只需创建一个 class 和一个 public 静态缓存,您可以从任何地方访问它。每个 UI 和会话的静态对象都是相同的。
由于您没有指定要缓存什么,我想您想要缓存您创建的自定义对象以用于某种服务器端逻辑。
要以简单的方式做到这一点 java,您可以创建一个简单的 hashmap 用作缓存。一个非常简单的例子是:
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);
}
}
这不是一个好的缓存,因为它不会使其条目无效。 如果可以添加任何库,则应该添加 Guava。 Guava 提供了一个很棒的缓存实现,您可以使用:
//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);
}
}