缓存中间件总结比较

Redis特点
    Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server(远程数据服务),该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。
    1、速度快
    2、持久化
    3、支持多种编程语言
    4、支持多种数据结构,支持五种数据结构:String、List、Set、Hash、Zset
    5、功能丰富,支持事务、流水线、发布\订阅、消息队列
    6、主从复制
    7、高可用及分布式 。Redis-Sentinel(v2.8) 支持高可用,Redis-Cluster(v3.0)支持分布式
    8、单线程,利用队列技术,将访问变为串行访问,消除了传统数据库中串行控制的开销

Redis使用场景
    1、缓存——热数据
    2、计数器——INCRBY 统计点击次数,单线程的特点
    3、队列
    4、位操作——大数据处理
    5、分布式锁和单线程机制
    6、最新列表
    7、排行榜——ZADD

Ehcache特点
    Ehcache最初是由Greg Luck于2003年开始开发。2009年,该项目被Terracotta购买。软件仍然是开源,但一些新的主要功能只能在商业产品中使用。EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。
    1、快速
    2、简单
    3、多种缓存策略
    4、缓存数据有两级:内存和磁盘,因此无需担心容量问题
    5、缓存数据会在虚拟机重启的过程中写入磁盘
    6、可以通过RMI、可插入API等方式进行分布式缓存
    7、具有缓存和缓存管理器的侦听接口
    8、支持多缓存管理器实例,以及一个实例的多个缓存区域

Ehcache使用场景
    1、首先最主要就是页面缓存。
    网站页面的数据来源非常广泛的,大多数来自不同的对象,而且有可能来自不同的db,所以给页面做缓存是一个不错的主意。
    2、常用数据的缓存
    一些配置信息,如后台的某些不经常改变的设置都可以缓存起来。
    3、作为二级缓存
    多个应用服务器的Ehcache定时从Redis中同步更新数据。

Memcache特点
    Memcache是一套开放源代码的分布式高速缓存系统,由LiveJournal的Brad Fitzpatrick开发。 Memcache通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
    1、协议简单:Memcached的服务器客户端通信使用简单的基于文本的协议。
    2、基于libevent的事件处理:libevent是个程序库,他将Linux 的epoll、BSD类操作系统的kqueue等时间处理功能封装成统一的接口,能在Linux、BSD、Solaris等操作系统上发挥其高性能。
    3、内置内存存储方式:Memcached的数据都存储在内置的内存存储空间中,因此重启Memcached,重启操作系统会导致全部数据消失。另外,内容容量达到指定的值之后Memcached会自动删除不适用的缓存。
    4、两阶段哈希结构:Memcached就像一个巨大的、存储了很多对的哈希表,客户端可以把数据存储在多台memcached上。查询数据时,客户端首先计算出阶段一哈希,选中一个节点;客户端将请求发送给选中的节点,然后memcached节点通过计算出阶段二哈希,查找真正的数据(item)并返回给客户端。从实现的角度看,Memcached是一个非阻塞的、基于事件的服务器程序。
    5、不互通信的分布式:服务器端并没有分布式功能,不会互相通信以共享信息。分布式是通过客户端实现。

Memcache使用场景
    1、分布式应用。
    由于memcached本身基于分布式的系统,所以尤其适合大型的分布式系统。
    2、数据库和前端之间的缓存。
    3、服务器间数据共享。
    举例来讲,我们将网站的登录系统、查询系统拆分为两个应用,放在不同的服务器上,并进行集群,那这个时候用户登录后,登录信息如何从登录系统服务器同步到查询系统服务器呢?
    这时候,我们便可以使用memcached,登录系统将登录信息缓存起来,查询系统便可以获得登录信息,就像获取本地信息一样。
    
    【不适合应用的场景】:
    1、缓存的数据量比较小。
    2、缓存的数据需要持久化。

总结
    部署调用:Redis、Memcache单独部署 ; Ehcache直接在jvm虚拟机中;
    持久化:Redis、Ehcache支持; Memcache不支持;
    量级:     Redis、Memcache重量级; Ehcache轻量级;
    分布式:: Redis、Memcache方便; Ehcache不方便;
    共 享: Redis、Memcache方便; Ehcache复杂;
    数据类型: Redis丰富; Ehcache、 Memcache简单;
    多线程: Memcache 、Ehcache支持; Redis不支持;

你可能感兴趣的:(java)