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 不支持;