memcache/redis/ehcache 缓存整理

来源:互联网 发布:曼隆学院 知乎 编辑:程序博客网 时间:2024/05/17 22:58
一、memcache(集中式缓存,用key-value方式存储数据,key不允许重复,value可以重复。

 memcache 是一种高性能、分布式对象缓存系统,最初设计于缓解动态网站数据库加载数据的延迟性,你可以把它想象成一个大的内存HashTable,就是一个key-value键值缓存。   Danga Interactive为了LiveJournal所发展的,以BSD license释放的一套开放源代码软件。

 1.依赖 :

memcache C语言所编写,依赖于最近版本的GCC和libevent。GCC编译器,同时基于libevent做socketIO。在安装memcache时保证你的系统同事具备有这两个环境。

2.多线程支持 :

memcache支持多个cpu同时工作,在memcache安装文件下有个叫threads.txt中特别说明,Bydefault, memcached is compiled as a single-threaded application.默认是单线程编译安装,如果你需要多线程则需要修改./configure --enable-threads,为了支持多核系统,前提是你的系统必须具有多线程工作模式。开启多线程工作的线程数默认是4,如果线程数超过cpu数容易发生操作死锁的概率。结合自己业务模式选择才能做到物尽其用。

 3.高性能 :

通过libevent完成socket 的通讯,理论上性能的瓶颈落在网卡上。


二、redis

 redis是在memcache之后编写的,它具有丰富的数据类型,暂时把它叫做缓存数据流中心,就像现在物流中心那样,order、package、store、classification、distribute、end。Redis 还可以同时使用 AOF 持久化和 RDB 持久化,在这种情况下, 当 Redis 重启时, 它会优先使用 AOF 文件来还原数据集, 因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。你甚至可以关闭持久化功能,让数据只在服务器运行时存在。

 

reidis的特性

1. 支持持久化  :

redis的本地持久化支持两种方式:RDB(RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照)和AOF(AOF持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集)。RDB 在redis.conf配置文件里配置持久化触发器,AOF指的是redis没增加一条记录都会保存到持久化文件中(保存的是这条记录的生成命令),如果不是用redis做DB用的话还不要开AOF ,数据太庞大了,重启恢复的时候是一个巨大的工程!

2.丰富的数据类型 :

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

3.高性能:

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

4.replication:

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


三、ehcache

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


1. 快速:Ehcache终被设计于large,high concurrency systems.
2. 简单:Ehcache的搭建到运用运行仅仅需要的是你宝贵的几分钟
3. 多种缓存策略
4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题
5. 缓存数据会在虚拟机重启的过程中写入磁盘
6. 可以通过RMI、可插入API等方式进行分布式缓存
7. 具有缓存和缓存管理器的侦听接口
8. 支持多缓存管理器实例,以及一个实例的多个缓存区域
9. 提供Hibernate的缓存实现