概述
在数据驱动的Web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载。缓存是解决这个问题的好办法。
种类
比较流行的有Memcached、Ehcache、OSCache,还有JSC、Jmemcached、Tcache等。
Memcached
1、定义:是高性能的分布式的内存对象缓存系统。
2、原理:通过在内存里维护一个统一的巨大的Hash表来存储各种格式的数据,包括图像、视频、文件以及数据库检索的数据等。
3、特点:是一种分布式的缓存系统,可以允许不同主机上的不同用户同时访问这个系统,从而解决了共享内存只能是单机的弊端,同时也减轻了数据库检索的压力。
4、优点:提高了访问获取数据的速度,也可用于加速Web应用。
5、缺点:没有特殊的安全机制,需要自己控制安全。
6、适用场景:缓存对性能影响较大的数据、缓存变动不是很频繁的数据。
7、语言:支持多重语言开发,包括:Perl/PHP/JAVA/C/Python/Ruby/C#。
8、延伸:也可以使用到分布式数据库、分布式计算等领域。
参考网址:http://phpe.net/2010/09/getting-started-with-memcached-distributed-memory-caching/
Ehcache
1、定义:是一个纯 Java 的进程内缓存框架。
2、应用举例:是 Hibernate 中默认的CacheProvide。
3、特点:快速;简单;多种缓存策略;多级缓存;数据缓存会在虚拟机重启的过程中写入缓存;通过RMI、可插入API等方式进行分布式缓存;
具有缓存和缓存管理器的侦听接口;支持多缓存管理器实例,以及一个实例的多缓存区域;提供Hibernate的缓存实现。
4、缺点:由于是进程中的缓存,在集群环境中,每个节点各自维护各自的缓存数据,当某个节点对缓存数据进行更新,这些更新数据无法在别的节点中共享,
从而会降低节点的运行效率,还会导致数据不同步情况的发生。所以需要使用集群解决方案。
5、集群解决方案:从V1.7开始,支持5种集群解决方案,分别是:Terracotta、RMI、JMS、JGroups、Ehcache Server,常用的是RMI、JGroups以及EhCache Server。
6、语言:EhCache Server集群方式基于HTTP协议,支持多语言开发;RMI、JGroups应该仅支持Java。
参考网址:http://www.ibm.com/developerworks/cn/java/j-lo-ehcache/index.html
OSCache
1、定义:是一个被广泛应用的J2EE缓存框架,还能应用于任何Java应用程序的普通的缓存解决方案。
2、特点:能缓存任何对象;拥有全面的API;永久缓存;支持集群;可以控制缓存过期时间。
3、适用场景:适用于对象缓存、Filter缓存、JSP或部分JSP缓存。
4、缺点:并发量较高时,会出现线程阻塞和数据错误(内部缺陷导致)。
参考网址:http://baike.baidu.com/view/1835163.html?fromTaglist
指标参数
缓存数据类型、分布式(集群)支持、API及使用、缓存过期控制、开发语言支持、缓存策略、伸缩性、缓存监控管理、数据一致性、稳定性
其他
各种缓存框架的简单比较:http://news.newhua.com/news1/program_language/2010/326/10326142152I7GCJ98DFI81BDHJ08J94FB386GJHHH5IJ2I28ECJ9K67.html
http://jackyrong.iteye.com/blog/239206