Archive for the 'cache' Category
[Solr源码分析]LRUCache和FastLRUCache实现分析
星期一, 八月 9th, 2010
在 [Solr 实践]Solr Cache使用介绍及分析 一文我有对Solr的LRUCache和FastLRUCache做了一些介绍,本文在此基础对其实现做些补充。
1、LRUCache的实现分析
在分析LRUCache前先对LinkedHashMap做些介绍。LinkedHashMap继承于HashMap,它使用了一个双向链表来存储Map中的Entry顺序关系,这种顺序有两种,一种是LRU顺序,一种是插入顺序,这可以由其构造函数public LinkedHashMap(int initialCapacity,float loadFactor, boolean accessOrder)指定。所以,对于get、put、remove等操作,LinkedHashMap除了要做HashMap做的事情,还做些调整Entry顺序链表的工作。
以get操作为例,如果是LRU顺序(accessOrder为true),Entry的recordAccess方法就调整get到的Entry到链表的头部去:
public V get(Object key) {
Entry<K,V> e = (Entry<K,V>)getEntry(key);
if (e [...]
memcache proxy之moxi介绍
星期六, 一月 23rd, 2010
续接上文 memcache-proxy之memagent介绍分析,本文介绍另一个功能强大的memcache proxy之moxi(http://labs.northscale.com/moxi/)。话说一个proxy都敢造次自称为先知!由于精力有限,本文只对moxi做些功能性介绍,而不对其实现代码做分析。
memcache proxy之memagent介绍分析
星期六, 一月 23rd, 2010
memagent(http://code.google.com/p/memagent/)是一个memcache proxy,它提供的功能及特点有:
1、和每个memcache server保持多个长连接,效果是减少memcache server保持的连接数量及创建销毁连接的开销。不过,memcache本身就支持大并发连接,这个功能也就没什么特别的说道。
2、支持memcache的binary协议命令,实现请求的转发。
3、和memcache一样,基于libevent的事件驱动来处理IO。
4、支持ketama 的一致性hash算法。
5、支持memcache backup集群,当memcache集群有机器挂了,memagent会将get请求转向memcache backup集群。这个功能对于cache的稳定性要求高的场景下会有用武之地。
就提供的功能而言,memagent是个很简单的东西。对于较大的memcache集群,可以考虑搭一套memagent作为proxy使用。