Caffeine

news/2024/9/21 0:33:54/文章来源:https://www.cnblogs.com/zhegemaw/p/18370647

Caffeine 是java中的高性能本地缓存,提供了丰富的缓存功能。Caffeine 的目标是提供一个高吞吐量、低延迟、并发友好的缓存实现。

特点

  • 高性能:Caffeine 是基于内存的本地缓存,访问速度非常快,并且在高并发环境下表现优秀。
  • 低延迟:由于数据直接存储在应用程序的本地内存中,访问延迟几乎为零。
  • 近乎零GC开销:设计上非常高效,垃圾回收(GC)开销非常小。
  • 配置灵活:支持多种缓存失效策略,如基于时间的过期、基于容量的过期等。
  • 易用性:简单易用的API,非常适合在Java应用程序中快速集成。

缓存策略配置

Caffeine 提供了多种缓存策略和配置选项,可以灵活地满足各种需求:

  • 缓存过期策略:写入后过期expireAfterWrite、访问后过期expireAfterAccess
  • 容量配置
  • 自定义缓存加载:同步加载、异步加载
  • 统计信息:监控缓存的使用情况和性能指标 

使用

<dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId><version>3.0.4</version> <!-- 请根据实际需要选择版本 -->
</dependency>
    private static Cache<String, String> localCache = Caffeine.newBuilder().initialCapacity(5000).maximumSize(100000).expireAfterWrite(60, TimeUnit.SECONDS).softValues().build();

Caffeine和Redis对比

 

Redis

Caffeine

概述

  • 类型: 分布式缓存NoSQL数据库

  • 语言: 多语言支持,主要基于 C 语言

  • 特点: 高可用、持久化、丰富的数据结构、多种部署模式

  • 类型: 本地缓存库

  • 语言: Java

  • 特点: 高性能、低延迟、内存缓存

优点

  1. 分布式支持:可以作为分布式缓存,支持多个应用实例共享缓存数据。

  2. 多种数据结构:支持字符串、哈希、列表、集合、有序集合、位图、HyperLogLog 等多种数据结构。

  3. 持久化:支持数据持久化到磁盘,防止数据丢失。

  4. 高可用:支持主从复制、哨兵模式和集群模式,提供高可用性和规模化扩展能力。

  5. 丰富功能:如发布/订阅、Lua 脚本、事务等。

  1. 高性能:Caffeine 是基于内存的本地缓存,访问速度非常快,并且在高并发环境下表现优秀。

  2. 低延迟:由于数据直接存储在应用程序的本地内存中,访问延迟几乎为零。

  3. 近乎零GC开销:设计上非常高效,垃圾回收(GC)开销非常小。

  4. 配置灵活:支持多种缓存失效策略,如基于时间的过期、基于容量的过期等。

  5. 易用性:简单易用的API,非常适合在Java应用程序中快速集成。

缺点

  1. 网络开销:由于Redis在分布式环境中使用,访问需要通过网络,不如本地缓存那么低延迟。

  2. 配置和运维复杂:需要安装和维护Redis服务器,相对于本地缓存库,运维复杂度高。

  3. 内存开销:高频访问大数据量时,内存占用较大,需要合理配置和管理。

  1. 局限于单个应用节点:只能在单个应用实例中使用,无法在多个应用实例之间共享缓存数据。

  2. 内存有限制:缓存数据受限于应用服务器的内存大小,适合不需要大规模数据缓存的应用场景。

  3. 无持久化支持:数据仅存储在内存中,应用重启或崩溃时,缓存数据丢失。

使用场景

  • 分布式系统,需要多个应用实例共享缓存数据

  • 大规模缓存需求,单台服务器内存无法满足。

  • 需要数据高可用、持久化、跨节点共享。

  • 需要复杂数据结构和功能支持,如发布/订阅、计数等。

  • 单节点应用,需要快速访问本地缓存

  • 高并发、高性能要求的应用。

  • 小规模缓存需求,不需要跨节点共享数据。

  • 缓存数据在应用生命周期内有效,无需持久化。

 

联系:

一般将两者结合起来,形成一二级缓存。使用流程大致如下:

  • 1.一级缓存:先去本地缓存caffeine中查找数据(本地)
  • 2.二级缓存:如果没有的话,去redis中查找数据(远程)
  • 3.数据库:都没有,再去数据库中查找数据(磁盘)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/784585.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

龙哥量化:TB交易开拓者_趋势跟踪策略_多策略对单品种_A00011880206期货量化策略,严格的用样本内参数, 跑样本外数据,滚动测试未来行情

如果您需要代写技术指标公式, 请联系我。 龙哥QQ:591438821 龙哥微信:Long622889 也可以把您的通达信,文华技术指标改成TB交易开拓者的自动交易量化策略。 量化策略介绍投资标的:菜籽油(多策略对单品种)。策略分类:趋势策略。策略周期:3分钟。策略风格:短线波段,连…

DC-7

靶机介绍靶机下载地址:https://download.vulnhub.com/dc/DC-7.zip 环境搭建下载之后,解压,使用vmware导入或者virtualbox导入都可以,但注意要保证与你的攻击机在同一网段下,vmware要使用最新版kali攻击机:192.168.98.136 靶机渗透 信息收集 扫描主机 ​​靶机ip:192.168.…

Back-off restarting failed container

修改 为下面 可以询问gpt要到正确配置

Failed to create pod sandbox: rpc error: code = Unknown desc = [failed to set up sandbox container “

报错信息 Warning FailedCreatePodSandBox 28m kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = [failed to set up sandbox container "899b2a80f185eadd9ea231a8991ce5e9d92076cab46917b1e5653f333561df03" network for pod "nginx-…

Nginx静态服务

**Nginx****静态服务 1.****静态资源类型 Nginx 作为静态资源 Web 服务器部署配置, 传输⾮常的⾼效, 常常⽤于静态资源处理, 请求, 动静分离 图⽚压缩案例server {listen 80;server_name static.zgw.top;root /soft/code/image;index index.html index.htm ;sendfile on;access…

BST 二叉搜索树 BinarySearchTree C++实现(递归/非递归)

目录二叉搜索树基本概念常用结论用途二叉搜索树的性能分析二叉搜索树的操作查找插入删除代码实现BSTree.hpptest.cc 二叉搜索树 基本概念 二叉搜索树(BST,Binary Search Tree) 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则…

当SOA遇到DDD

本文讨论软件设计中的决策,特别是关于将较大的系统拆分为多个可独立部署的服务端点。不会特别讨论【服务端点设计】,但我想探讨一下为创建多个服务应用程序进行构思的阶段。 面对复杂问题,通常试图理解复杂性的各部分。将问题拆解为更易于理解和处理的小模块,可以更有效地应…

priority_queue

priority_queue priority_queue 容器适配器定义了一个元素有序排列的队列。默认队列头部的元素优先级最高。因为它是一个队列,所以只能访问第一个元素,这也意味着优先级最高的元素总是第一个被处理。 priority_queue 模板有 3 个参数,其中两个有默认的参数;第一个参数是存储…

几个场景下用flink如何解决的思考

车辆GPS流和车辆过地磅重量流union,地磅数据最多晚到5天 使用allowedLateness(5d)可以让窗户等待5天再关闭。 1、第二天flink任务重启了,迟到数据还能处理吗?2、大部分车辆都没有称重数据,如何提前关闭这些窗口,避免过多浪费内存设置allowedLateness(5d) 对于没有称重数据…

Mysql从指定位置截取字符串

在实际的项目开发中有时会有对数据库某字段截取部分的需求,这种场景有时直接通过数据库操作来实现比通过代码实现要更方便快捷些,mysql有很多字符串函数可以用来处理这些需求,如Mysql字符串截取总结:left()、right()、substring()、substring_index()。 一.从左开始截取字符…

数据可视化大屏的安全入口:高效登录与入口界面的关键设计(AxureRP原型)

在数据可视化项目中,登录界面和入口界面起着至关重要的作用。登录界面不仅是用户访问系统的第一个接触点,更是确保系统安全性的重要防线。通过有效的身份验证机制,它能够防止未经授权的用户访问敏感数据,保护数据的完整性和隐私。此外,登录界面还承担着展示品牌形象、提升…

RabbitMQ 基础概念与架构设计及工作机制学习总结

什么是RabbitMQ MQ全称为Message Queue,即消息队列. 它也是一个队列,遵循FIFO原则 。RabbitMQ则是一个开源的消息中间件,由erlang语言开发,基于AMQP协议实现的一个软件产品,提供应用程序之间的通信方法,在分布式系统开发中广泛应用。 AMQP协议 AMQP,即Advanced Message …