java高性能文件缓存,caffeine缓存应用场景
一、前言二。缓存介绍(一)缓存的比较(二)本地缓存(一)SpringCache的需求分析(二)序列化(三)集成四。摘要
目录
Caffeine是一个进程内缓存框架,采用了Java 8最新的[StampedLock]乐观锁技术,大大提高了缓存的并发吞吐量。它是一个高性能的Java缓存库,被称为最快的缓存。
一、序言
00-1010横向比较常用的缓存,有助于加深对缓存的理解,提高技术选择的合理性。比较以下三种常见的缓存:Redis、EhCache和咖啡因。
1.序列化
序列化原因Redis必须实现序列化进程之间的数据传输,所以必须实现序列化。多数情况下涉及内网网络传输;作为缓存数据库,持久性是标准。EhCache不一定需要实现序列化。当缓存配置没有保存到磁盘时,就不需要实现序列化接口。使用时,如果不确定是否需要持久化到磁盘,建议统一实现序列化接口。Caffeine不需要实现序列化Map对象的改进接口,也不涉及任何形式的网络传输和持久化,所以根本不需要实现序列化接口。2.过程关系
关于缓存进程关系的备注Redis独立于业务进程,由操作系统独立管理,业务系统重启对缓存服务没有影响。Redis服务独立于业务服务,相互之间影响很小。EhCache依附于业务流程,业务系统重启,存储和内存部分的缓存数据丢失;缓存配置有两种模式:一种是纯内存型,一种是持久化到业务流程附带的磁盘咖啡因,业务系统重启,缓存数据全部丢失。对纯内存型缓存的理解:所有的缓存都是以内存作为存储介质,各种缓存服务的区别如下:Caffeine是内存型缓存,是指缓存和调用者属于同一个应用,准确的说是同一个JVM;Redis指的是另一个独立进程的内存类型,缓存的数据存放在Redis数据库的内存中,而不是调用服务所属的内存中。
00-1010本地缓存对应于分布式缓存。缓存进程和应用程序进程属于同一个JVM,数据读写在一个进程中完成。本地缓存没有网络开销,访问速度非常快。
咖啡因是基于番石榴缓存增强的新一代缓存技术,具有优异的缓存性能。
1、地图
JDK的内置地图可以作为缓存的一种实现,但严格来说不能归为缓存。原因如下:第一,存储的数据不能主动过期;第二,没有缓存消除策略。
二、缓存简介
咖啡因是Spring系统内置的缓存之一,Spring Cache还提供了调用接口支持。
(一)缓存对比
1、缓存管理器
Caffeine属于进程的内部缓存框架,不需要配置多个数据源,一个CacheManager就可以满足要求。如果在应用程序中只使用咖啡因作为唯一的缓存框架,那么在通过注释使用时不需要明确指出。
2、CacheName
对于任何一种缓存,不同业务模块之间的缓存过期时间和缓存报废策略几乎是不同的,所以它应该支持多个CacheName,并具有不同的配置。过期时间是不同CacheName之间缓存配置的一个重要差异。
3、钥匙
I类内存缓存没有可视化界面,所以键值的唯一性是正确使用业务缓存的基本保证。
(二)本地缓存
咖啡因缓存不涉及任何序列化,所以目标缓存对象不需要实现可序列化接口。如果涉及多级缓存或者多个缓存共享,其他需要网络传输或者持久化的缓存需要序列化。Caffeine不序列化,尽管它也使用实现序列化的实体类。
不需要序列化,降低了使用缓存的难度。
00-1010 1.引入依赖性
如果没有特殊要求,使用内置版本的较新的SpringBoot。
依赖性groupIdcom.github.ben-manes.caffeine/groupId人工制品咖啡因/人工制品id/依赖性依赖性groupIdorg.springframework/groupId ar
tifactId>spring-context-support</artifactId></dependency>2、全局配置
全局配置中指定使用caffeine
缓存管理。
spring: cache: type: caffeine
3、缓存管理器
配置缓存管理器:多CacheName配置。
public interface CacheNameTimeConstant { String CACHE_DEFAULT = "CACHE_DEFAULT"; String CACHE_10SECS = "CACHE_10SECS"; String CACHE_60SECS = "CACHE_60SECS";}
同一个CacheManager配置多个CacheName,此处仅配置过期时间的差异,其余配置可自由增加。
@Beanpublic CacheManager caffeineCacheManager() { SimpleCacheManager cacheManager = new SimpleCacheManager(); List<CaffeineCache> caches = new ArrayList<>(); caches.add(new CaffeineCache(CacheNameTimeConstant.CACHE_5SECS, Caffeine.newBuilder().expireAfterWrite(5, TimeUnit.SECONDS).build())); caches.add(new CaffeineCache(CacheNameTimeConstant.CACHE_10SECS, Caffeine.newBuilder().expireAfterWrite(10, TimeUnit.SECONDS).build())); caches.add(new CaffeineCache(CacheNameTimeConstant.CACHE_30SECS, Caffeine.newBuilder().expireAfterWrite(30, TimeUnit.SECONDS).build())); cacheManager.setCaches(caches); return cacheManager;}
四、小结
Java领域可用的缓存框架非常多,Caffeine
不属于分布式缓存,但不影响其在本地缓存场景出色的表现。开发者在进行缓存架构设计时需要综合考虑各类缓存的优缺点,依据具体场景选配相应缓存。
到此这篇关于Java高性能本地缓存框架Caffeine的实现的文章就介绍到这了,更多相关Java Caffeine内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。