Ehcache和Redis的比较 总结

1.概念不同:

Redis是一个基于内存的高性能key-value数据库,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。

 

2.运行程序不同:

Redis:属于独立的运行程序,需要单独安装后,使用JAVA中的Jedis来操纵。因为它是独立,所以如果你写个单元测试程序,放一些数据在Redis中,然后又写一个程序去拿数据,那么是可以拿到这个数据的。,
ehcache:与Redis明显不同,它与java程序是绑在一起的,java程序活着,它就活着。譬如,写一个独立程序放数据,再写一个独立程序拿数据,那么是拿不到数据的。只能在独立程序中才能拿到数据。

3.特性不同:

Redis

1】. 支持持久化

redis的本地持久化支持两种方式:RDB和AOF。RDB 在redis.conf配置文件里配置持久化触发器,AOF指的是redis没增加一条记录都会保存到持久化文件中(保存的是这条记录的生成命令),如果不是用redis做DB用的话还会不要开AOF ,数据太庞大了,重启恢复的时候是一个巨大的工程!

2】.丰富的数据类型 redis 支持 String 、Lists、sets、sorted sets、hashes 多种数据类型,新浪微博会使用redis做nosql主要也是它具有这些类型,时间排序、职能排序、我的微博、发给我的这些功能List 和 sorted set 的强大操作功能息息相关

3】高性能 这点跟memcache很想象,内存操作的级别是毫秒级的比硬盘操作秒级操作自然高效不少,较少了磁头寻道、数据读取、页面交换这些高开销的操作!这也是NOSQL冒出来的原因吧,应该是高性能 是基于RDBMS的衍生产品,虽然RDBMS也具有缓存结构,但是始终在app层面不是我们想要的那么操控的。

4】replication redis提供主从复制方案,跟mysql一样增量复制而且复制的实现都很相似,这个复制跟AOF有点类似复制的是新增记录命令,主库新增记录将新增脚本发送给从库,从库根据脚本生成记录,这个过程非常快,就看网络了,一般主从都是在同一个局域网,所以可以说redis的主从近似及时同步,同事它还支持一主多从,动态添加从库,从库数量没有限制。 主从库搭建,我觉得还是采用网状模式,如果使用链式(master-slave-slave-slave-slave·····)如果第一个slave出现宕机重启,首先从master 接收 数据恢复脚本,这个是阻塞的,如果主库数据几TB的情况恢复过程得花上一段时间,在这个过程中其他的slave就无法和主库同步了。

5】更新快

 

Ehcache主要的特性有:

1】. 快速

2】. 简单

3】. 多种缓存策略

4】. 缓存数据有两级:内存和磁盘,因此无需担心容量问题

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

6】. 可以通过RMI、可插入API等方式进行分布式缓存

7】. 具有缓存和缓存管理器的侦听接口

8.】 支持多缓存管理器实例,以及一个实例的多个缓存区域

9】. 提供Hibernate的缓存实现

 

4.一致性不同:

Redis(分布式缓存):
                一致性:由于是db的缓存,内容可能与db不一致,需要容忍不一致性;但所有应用服务器在同一时间,读到的数据都是一样的;
                性能:较好,get大约在5ms的速度;
ehcache(本地缓存):
                一致性:由于是保存在JVM中,每台机器数据都可能不一样,一致性较差;
                性能:最好,由于是直接读取内存数据,性能可以保证,大约在0.5ms的性能级别。
   5.应用场景不同:


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

ehcache直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。


如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。

如果是单个应用或者对缓存访问要求很高的应用,用ehcache。

补充下:ehcache也有缓存共享方案,不过是通过RMI或者Jgroup多播方式进行广播缓存通知更新,缓存共享复杂,维护不方便;简单的共享可以,但是涉及到缓存恢复,大数据缓存,则不合适。         
      

参考文:https://www.cnblogs.com/firejava/p/6256788.html

https://blog.csdn.net/shenbushen/article/details/52140078

https://blog.csdn.net/xnf1991/article/details/54694620    

    
    

  
  

        


    
        
            
     

 

你可能感兴趣的:(java)