网站开发需要投入多少时间,动易做网站如何,免费tk域名注册接口,怀化网站建设企业caffeine 缓存缓存是几乎所有应用程序性能的关键。 有时需要分布式缓存 #xff0c;但并非总是如此。 在许多情况下#xff0c;本地缓存可以很好地工作#xff0c;并且不需要分布式缓存的开销和复杂性。 因此#xff0c;在许多应用程序中#xff0c;包括普通的Spring和Sp… caffeine 缓存 缓存是几乎所有应用程序性能的关键。 有时需要分布式缓存 但并非总是如此。 在许多情况下本地缓存可以很好地工作并且不需要分布式缓存的开销和复杂性。 因此在许多应用程序中包括普通的Spring和Spring Boot您可以在任何方法上使用Cacheable 其结果将被缓存以便下次调用该方法时将返回缓存的结果。 Spring有一些默认的缓存管理器实现但是外部库总是比简单的实现更好更灵活。 例如咖啡因是一种高性能的 Java缓存库 。 Spring Boot带有CaffeineCacheManager 。 因此理想情况下这就是您所需要的一切–您只需创建一个缓存管理器bean并为Cacheable注释方法进行缓存。 但是提供的缓存管理器仅允许您配置一个缓存规范。 缓存规范包括到期时间初始容量最大大小等。因此将使用单个缓存规范来创建此缓存管理器下的所有缓存。 高速缓存管理器支持预定义高速缓存以及动态创建的高速缓存的列表但是在两种情况下都使用单个高速缓存规范。 这对于生产来说很少有用。 通常内置缓存管理器是您必须要小心的地方 。 有一些 博客文章告诉您如何使用自定义规范定义自定义缓存。 但是这些选项不支持内置管理器支持的动态默认缓存规范用例。 理想情况下您应该能够使用Cacheable任何名称并且应该使用某些默认规范自动创建缓存但是您还应该选择覆盖特定缓存的名称。 这就是为什么我决定使用一种比在代码中定义所有缓存来提高灵活性的简单方法。 它扩展了CaffeineCacheManager以提供该功能 /** * Extending Caffeine cache manager to allow flexible per-cache configuration */ public class FlexibleCaffeineCacheManager extends CaffeineCacheManager implements InitializingBean { private MapString, String cacheSpecs new HashMap(); private MapString, CaffeineObject, Object builders new HashMap(); private CacheLoader cacheLoader; Override public void afterPropertiesSet() throws Exception { for (Map.EntryString, String cacheSpecEntry : cacheSpecs.entrySet()) { builders.put(cacheSpecEntry.getKey(), Caffeine.from(cacheSpecEntry.getValue())); } } Override SuppressWarnings ( unchecked ) protected CacheObject, Object createNativeCaffeineCache(String name) { CaffeineObject, Object builder builders.get(name); if (builder null ) { return super .createNativeCaffeineCache(name); } if ( this .cacheLoader ! null ) { return builder.build( this .cacheLoader); } else { return builder.build(); } } public MapString, String getCacheSpecs() { return cacheSpecs; } public void setCacheSpecs(MapString, String cacheSpecs) { this .cacheSpecs cacheSpecs; } public void setCacheLoader(CacheLoader cacheLoader) { super .setCacheLoader(cacheLoader); this .cacheLoader cacheLoader; } } 简而言之它会根据规格创建一个咖啡因生成器并在需要新的缓存时使用它而不是默认生成器。 然后样本XML配置将如下所示 bean id cacheManager class net.bozho.util.FlexibleCaffeineCacheManager property name cacheSpecification value expireAfterWrite10m / property name cacheSpecs map entry key statistics value expireAfterWrite1h / / map / property / bean 使用Java配置它非常简单–您只需设置cacheSpecs映射即可。 虽然Spring已经变成了一个提供各种功能的庞大框架但它并没有放弃可扩展性的设计原则。 扩展内置框架类经常发生并且应该在每个人的工具箱中。 创建这些类时要考虑到扩展名-您会注意到CaffeineCacheManager中的许多方法都protected 。 因此我们应该在需要时利用它。 翻译自: https://www.javacodegeeks.com/2019/05/multiple-cache-configurations-caffeine-spring-boot.htmlcaffeine 缓存