有关缓存

最近阅读了一些有关缓存的资料,主要是两个ehcache和memcached.由于都没有使用过,所以在此只是对收集的资料进行一些总结.

1.性能比较

ehcache和memcached的性能都很强.有些资料显示ehcache的性能数百倍于memcached.由于自己没有使用过,所以没有具体感受.不过memcached被很多大型网站使用,可见其性能已经相当强劲.

2.持久化

memcached是纯内存型缓存,但是可以使用第三方模块进行磁盘或者数据库的缓存持久化.

ehcache则原生支持将缓存持久化到磁盘,在缓存服务器重启的时候会自动将磁盘的内容读入内存.当内存使用超过设置值时会自动将缓存持久化到磁盘.

3.对集群的支持

memcached服务器之间并不通信,所有的分布式算法都在客户端实现.由于服务器之间也不拷贝数据,所以容灾主要靠客户端算法完成.

ehcache使用RMI在服务器之间做异步数据同步,以保证服务器之间的数据一致性.所以原生容灾支持,不需要客户端的特别算法.

4.缓存的过期移除策略

memcached可以设置缓存过期时间,但是并不设置异步监控线程清理过期的缓存,而是在客户端请求缓存时检查是否过期.当内存空间不足的时候,会使用LRU(最近最少使用)算法释放内存空间.

ehcache使用JVM的内存空间,同样使用LRU算法,同时也支持FIFO,LFU等算法.推荐(也是默认)使用LRU.

5.API客户端

memcached支持使用socket通信的任何编程语言客户端,现在Python,Java,PHP,Ruby,Perl等等几乎所有语言都有相应的客户端.

ehcache主要服务于Java,本身也由Java开发.是Hibernate默认使用的外部缓存.所以只有Java访问API.但服务器也可以使用.但是也可以建立使用RESTful或者Webservice的服务器,这样其它语言也可以使用HTTP协议使用ehcache缓存服务.

memcached只支持C/S的访问结构.服务器本身的cpu负载极低,在分布式应用中性能主要瓶颈在于网络通信.

ehcache现在的版本也支持memcached的C/S方式,同时也支持在JAVA应用内部集成.

猜你喜欢

转载自blog.csdn.net/u012631045/article/details/16898703