Infinispan 缓存比较和对比

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

Infinispan 本地缓存 有几个特性,使其不仅仅是一个映射——过期和逐出、侦听器、统计信息、事务、缓存存储等等。然而,这是有代价的——由于所有的钩子和对象分配,普通的 ConcurrentHashMap 比本地缓存更快。

有些应用程序需要介于两者之间的东西——出色的性能,但也需要其中的一些特性。在我们的例子中,动机是 Hibernate 二级缓存中的内部缓存。因此,Infinispan 8.0.1.Final 带来了 简单的缓存 AdvancedCache 接口的替代实现,当您只需要基础知识时,它已针对最大性能进行了优化。

下表显示了简单缓存中可用的功能:

特征 可用性
基本的类似地图的 API
缓存侦听器(非集群)
过期
驱逐
安全
JMX访问
统计数据
交易
调用批处理
持久性(缓存存储和加载器)
地图减少框架
分布式执行器框架
自定义拦截器
索引(查询)
兼容性(嵌入式/服务器)
存储为二进制

配置一个简单的缓存就像在 XML 配置中添加一个属性一样简单:


 <local-cache name="mySimpleCache" simple-cache="true">
  <!-- expiration, eviction, security... -->
</local-cache>

虽然配置模式允许设置不受支持的功能,但这样做会在创建缓存时导致异常。

您还可以通过编程方式配置简单缓存:


 <local-cache name="mySimpleCache" simple-cache="true">
  <!-- expiration, eviction, security... -->
</local-cache>


那么,您可以期待什么样的性能改进?我们已经使用 JMH 运行了一个基本的(单线程)基准测试,这就是我们得到的:

执行 get()(操作/秒) put()(操作/秒)
ConcurrentHashMap 128,354,135 ± 2,178,755 33,980,088 ± 28,487
简单缓存 86,969,897 ± 738,935 14,044,642 ± 14,280
本地缓存 17,280,018 ± 361,910 2,267,850 ± 44,814

这为我们提供了大约 5✕ 的读取速度和 6✕ 的写入速度。您的情况可能会有所不同,但可以肯定的是,简单的缓存可以提供显着的性能优势。

因此,如果您的用例允许,请试用简单缓存并告诉我们。就像一个配置属性一样简单!

相关文章