返回顶部
首页 > 资讯 > 后端开发 > Python >Java高性能本地缓存框架Caffeine的实现
  • 474
分享到

Java高性能本地缓存框架Caffeine的实现

2024-04-02 19:04:59 474人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、序言二、缓存简介(一)缓存对比(二)本地缓存三、springCache(一)需求分析(二)序列化(三)集成四、小结一、序言 Caffeine是一个进程内部缓存框架,使用了Ja

一、序言

Caffeine是一个进程内部缓存框架,使用了Java 8最新的[StampedLock]乐观技术,极大提高缓存并发吞吐量,一个高性能的 Java 缓存库,被称为最快缓存。

二、缓存简介

(一)缓存对比

从横向对常用的缓存进行对比,有助于加深对缓存的理解,有助于提高技术选型的合理性。下面对比三种常用缓存:Redis、EhCache、Caffeine。

1、序列化

缓存序列化原因
Redis必须实现序列化进程间数据传输,因此必须实现序列化。大多数情况下涉及内网网络传输;作为缓存数据库使用,持久化是标配。
EhCache不一定需要实现序列化当缓存配置不持久化到磁盘时,无需实现序列化接口。使用时,如果不确定是否需要持久化到磁盘,建议统一实现序列化接口。
Caffeine不需要实现序列化Map对象的改进型接口,不涉及任何形式的网络传输和持久化,因此完全不需要实现序列化接口。

2、进程关系

缓存进程关系备注
Redis与业务进程独立,由操作系统独立管理,业务系统重启对缓存服务无影响Redis服务与业务服务独立,互相影响较小
EhCache附着于业务进程,业务系统重启,存储与内存部分的缓存数据丢失;存储与硬盘部分的数据继续存在缓存配置存在两种模式:一种是纯内存型,一种是可持久化到磁盘
Caffeine附着于业务进程,业务系统重启,缓存数据全部丢失纯内存型

内存型缓存的理解:缓存都是使用内存作为存储媒介的,各种缓存服务的区别如下:Caffeine是内存型缓存是指缓存与调用者属于同一个应用,准确的说属于同一个JVM;Redis是指另外一个独立进程的内存型,缓存数据存储在Redis数据库的内存中,而不是在调用服务所属的内存中。

(二)本地缓存

本地缓存与分布式缓存对应,缓存进程和应用进程同属于一个JVM,数据的读、写在一个进程内完成。本地缓存没有网络开销,访问速度很快。

Caffeine是基于Guava Cache增强的新一代缓存技术,缓存性能极其出色。

1、Map

jdk内置的Map可作为缓存的一种实现方式,然而严格意义来讲,其不能算作缓存的范畴。原因如下:一是其存储的数据不能主动过期;二是无任何缓存淘汰策略。

三、SprinGCache

Caffeine作为Spring体系中内置的缓存之一,Spring Cache同样提供调用接口支持。

(一)需求分析

1、CacheManager

Caffeine属于进程内部缓存框架,不需要配置多数据源,因此一个CacheManager即可满足需求。如果应用中仅使用Caffeine作为唯一的缓存框架,那么通过注解使用时无需显式指明。

2、CacheName

任何一类缓存,不同业务模块间缓存过期时间以及缓存淘汰策略几乎不相同,因此应该支持多CacheName,并且应该具有不同配置。过期时间是不同CacheName间缓存配置的重要区别。

3、Key

内存型缓存,无可视化界面,因此首要满足键值的唯一性,键值唯一是正确使用业务缓存的基础保证。

(二)序列化

Caffeine缓存不涉及任何序列化,因此目标缓存对象不需要实现Serializable接口。若涉及多级缓存或者多种缓存共用,其它需要网络传输或者持久化的缓存需要序列化,Caffeine尽管也使用实现序列化的实体类,但是不做序列化操作。

不需要序列化,降低了缓存使用难度。

(三)集成

1、引入依赖

如果无特别要求,使用较新SpringBoot的内置版本即可。

<dependency>
    <groupId>com.GitHub.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>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,此处仅配置过期时间的差异,其余配置可自由增加。

@Bean
public 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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java高性能本地缓存框架Caffeine的实现

本文链接: https://lsjlt.com/news/140684.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java高性能本地缓存框架Caffeine的实现
    目录一、序言二、缓存简介(一)缓存对比(二)本地缓存三、SpringCache(一)需求分析(二)序列化(三)集成四、小结一、序言 Caffeine是一个进程内部缓存框架,使用了Ja...
    99+
    2024-04-02
  • 轻松了解java中Caffeine高性能缓存库
    目录轻松lCaffeine1、依赖2、写入缓存 2.1、手动写入2.2、同步加载2.3、异步加载3、缓存值的清理3.1、基于大小的清理3.2、基于时间的清理 3....
    99+
    2024-04-02
  • 详解高性能缓存Caffeine原理及实战
    目录一、简介二、Caffeine 原理2.1、淘汰算法2.1.1、常见算法2.1.2、W-TinyLFU 算法2.2、高性能读写2.2.1、读缓冲2.2.2、写缓冲三、Caffein...
    99+
    2024-04-02
  • 利用Springboot+Caffeine实现本地缓存实例代码
    目录简介Caffeine 介绍思路本文使用开发环境总结简介 之前在项目中遇到了一个新需求,领导让我使用本地缓存,来缓存数据库查出的用户信息,经过一番资料查阅和实验,最终确定了使用Ca...
    99+
    2023-01-07
    spring boot 本地缓存 springboot缓存框架 springboot caffeine
  • SpringBoot集成本地缓存性能之王Caffeine示例详解
    目录引言Spring Cache 是什么集成 Caffeine核心原理引言 使用缓存的目的就是提高性能,今天码哥带大家实践运用 spring-boot-starter-ca...
    99+
    2024-04-02
  • java本地缓存如何实现
    Java本地缓存可以通过多种方式实现,以下是其中几种常用的方法:1. 使用HashMap:可以使用java.util.HashMap...
    99+
    2023-10-21
    java
  • Java实现本地缓存、分布式缓存及多级缓存
    以下均为自己参考其它博主文章或自己理解整理而成,如有错误之处,欢迎在评论区批评指正! 0. 缓存简介        像MySql等传统的关系型数据库已经不能适用于所有的业务场景,比如电商系统的秒杀场景,APP首页的访问流量高峰场景,很容易造...
    99+
    2023-09-17
    java
  • 如何在 ASP 框架中使用 npm 缓存提高性能?
    在开发 ASP.NET 应用程序时,我们通常使用 NuGet 包管理器来引用第三方依赖项。但是,如果你已经在项目中使用了 npm 包管理器,你可能会想知道如何在 ASP.NET 应用程序中使用 npm 缓存来提高性能。 npm 缓存是一个本...
    99+
    2023-11-09
    框架 缓存 npm
  • 利用Java如何实现本地缓存
    本篇文章给大家分享的是有关利用Java如何实现本地缓存,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用场景在 Java 应用中,对于访问频率高,更新少的数据,通常的方案是将这...
    99+
    2023-05-31
    java 本地缓存 ava
  • NumPy 框架在 Go 中实现高性能数据存储的秘密。
    NumPy 框架在 Go 中实现高性能数据存储的秘密 NumPy 是一个非常受欢迎的 Python 库,它为数据科学和数学计算提供了强大的工具。NumPy 提供了高效的数据存储和操作方法,使得 Python 成为了一个流行的数据科学语言。但...
    99+
    2023-10-18
    存储 numy 框架
  • 如何在ASP中使用缓存框架接口来提高性能?
    ASP是一种非常流行的Web开发框架,但是在使用ASP进行开发时,我们经常会遇到性能问题。为了解决这些问题,我们可以使用缓存框架接口来提高性能。在本文中,我们将介绍如何在ASP中使用缓存框架接口来提高性能。 一、缓存框架接口简介 缓存框架接...
    99+
    2023-06-14
    缓存 框架 接口
  • Django中如何实现缓存以提高性能
    在Django中,可以通过使用缓存机制来提高网站性能。Django内置了缓存框架,可以使用多种缓存后端,包括内存缓存、数据库缓存、文...
    99+
    2024-04-02
  • 浅谈Redis高并发缓存架构性能优化实战
    目录场景1: 中小型公司Redis缓存架构以及线上问题实战场景2: 大厂线上大规模商品缓存数据冷热分离实战场景3: 基于DCL机制解决热点缓存并发重建问题实战场景4: 突发性热点缓存...
    99+
    2024-04-02
  • Java基于LoadingCache实现本地缓存的示例代码
    目录一、 添加 maven 依赖二、CacheBuilder 方法说明三、创建 CacheLoader四、工具类五、guava Cache数据移除一、 添加 maven 依赖 <...
    99+
    2024-04-02
  • Redis与本地缓存的结合实现
    目录前言设计示例Redis懒加载缓存流程图代码示例优点缺点总结Redis结合本地缓存流程图代码示例优点缺点总结后记前言 我们开发中经常用到Redis作为缓存,将高频数据放在Redis...
    99+
    2024-04-02
  • 在PHP中实现高性能、高可用的Memcache缓存系统
    随着互联网应用的不断发展,数据量和访问量的急剧增加,如何提高应用程序的性能和可用性成为了企业和开发人员的重要问题。而Memcache缓存技术作为一种高效的内存缓存技术,被广泛应用在Web应用程序中,可以大大提高系统的性能和可用性。Memca...
    99+
    2023-05-15
    PHP 高性能 Memcache
  • 实现 Java 本地缓存,该从这几点开始
    缓存,我相信大家对它一定不陌生,在项目中,缓存肯定是必不可少的。市面上有非常多的缓存工具,比如 Redis、Guava Cache 或者 EHcache。对于这些工具,我想大家肯定都非常熟悉,所以今天我们不聊它们,我们来聊一聊如何实现本地缓...
    99+
    2016-07-11
    java教程 Java
  • LocalCache在Java项目中如何实现本地缓存
    今天就跟大家聊聊有关LocalCache在Java项目中如何实现本地缓存,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、本地缓存应用场景localcache有着极大的性能优势: 单...
    99+
    2023-05-31
    本地缓存 localstorage java
  • 在Java中使用 LocalCache如何实现本地缓存
    在Java中使用 LocalCache如何实现本地缓存?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。使用场景在Java应用中,对于访问频率高,更新少的数据,通常...
    99+
    2023-05-31
    java localcache 本地缓存
  • 如何在GO语言中使用容器框架来提高缓存性能?
    在现代计算机系统中,缓存是提高应用程序性能的重要因素之一。在高并发应用程序中,缓存的作用尤为重要。在GO语言中,有许多容器框架可用于提高缓存性能。本文将介绍如何使用这些容器框架来提高GO语言应用程序的性能。 一、使用Map Map是GO语...
    99+
    2023-07-24
    容器 框架 缓存
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作