java高性能文件缓存,caffeine缓存应用场景

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: