大厂都在用EhCache,它到底比Redis强在哪里?

本文探讨了EhCache作为缓存框架的优势,包括其简单快速、内存磁盘两级缓存、适用于单体应用等特性。与Redis对比,EhCache在JVM内的高速缓存和易用性方面表现出色,但在分布式支持上相对较弱。文章还介绍了EhCache的架构、过期策略和不同方式的使用,包括API、XML配置以及Spring Boot的集成示例。
摘要由CSDN通过智能技术生成

故事背景

随着硬件价格的走低,大家对硬件的依赖越来越高。甚至听说,代码不重要,不行就加机器呗。比如缓存的使用,通常有基于虚拟机内存、基于磁盘存储、基于中间件(Redis内存)等方式,我们都知道,最适合的才是最好的,但实践中,往往是动不动就直接上Redis。

那么,Redis一定是最好的选择吗?单不说对内存的要求,从效率和性能上来说,也未必是最优的。所以,不同的场景使用不同的缓存策略才是高手应该追求的。

这篇文章就带大家认识除Redis之外的另一种缓存框架:EhCache。之所以要写写,也是因为项目中运用了此框架,同时又遇到点问题,于是决定深入研究一下。研究之后,发现还真有点意思~

EhCache简介

EhCache是一个纯Java的进程内缓存框架,具有快速、精干的特点。注意的这里的关键字 进程 ,基于进程的缓存直觉告诉我们效率肯定要高一些,因为它直接在进程之内进行操作,但不同应用之间缓存的共享可能就会有问题。

EhCache是Hibernate中默认的CacheProvider,Spring Boot也对其进行了支持,Spring中提供的缓存抽象也支持对EhCache缓存框架的绑定,而且支持基于注解的方式来使用。因此,EhCache是一款被广泛使用的基于Java的高速缓存框架,使用起来也非常方便。

EhCache提供了多种缓存策略,主要分为内存和磁盘两级,是一款面向通用缓存、Java EE和轻量级容器的缓存框架。

EhCache的特点

简单说一下该框架的特点:

  • 简单、快速,拥有多种缓存策略;

  • 缓存数据有两级:内存和磁盘,无需担心容量问题;

  • 缓存数据会在虚拟机重启的过程中写入磁盘;

  • 可以通过RMI、可插入API等方式进行分布式缓存;

  • 具有缓存和缓存管理器的侦听接口;

  • 支持多缓存管理器实例,以及一个实例的多个缓存区域,并提供Hibernate的缓存实现;

EhCache可以单独使用,但通常会与Mybatis、Shiro等三方类库结合使用。本人项目中使用EhCache就是结合Shiro来使用的。

除了优点,EhCache也还有一些缺点。比如, 非常占用磁盘空间 ,这是因为DiskCache的算法简单,只是对元素直接追加存储。这样虽然可以提高效率,但在使用频繁的系统中,磁盘很快会满。

另外就是 不能保证数据安全 ,当然突然kill掉Java进程时,可能会产生冲突。EhCache解决冲突的方法是重建Cache,这对Cache数据需要保持时可能会产生影响。Cache只是简单的加速,不能保证数据的安全。

EhCache与Redis

EhCache直接在JVM中进行缓存,速度快,效率高。与Redis相比,操作简单、易用、高效,虽然EhCache也提供有缓存共享的方案,但对分布式集群的支持不太好,缓存共享实现麻烦。

Redis是通过Socket访问到缓存服务,效率比EhCache低,比数据库要快很多,处理集群和分布式缓存方便,有成熟的方案。

所以,如果是单体应用,或对缓存访问要求很高,可考虑采用EhCache;如果是大型系统,存在缓存共享、分布式部署、缓存内容很大时,则建议采用Redis。

EhCache架构图

看一下EhCache的架构图,大概了解一下它由几部分组成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值