memcached实现多个web应用session共享

来源:互联网 发布:软件下载网站哪个好 编辑:程序博客网 时间:2024/05/03 16:14

memcached是一个Client Server结构的远程Cache实现。

Server是用C写的,提供了多种语言的客户端API,包括Java, C#, Ruby, Python, PHP, Perl, C等多种语言。

memcached主要使用在Shared Nothing Architecture中。应用程序通过客户端API,从memcached server存取数据。

典型的应用,比如,用memcached作为数据库缓存。

也常有这样的用法,用memcached存放HTTP Session的数据。具体做法是包装Session Interface,截获setAttribute(), getAttribute()方法。

MemcachedSessionWrapper {

Object getAttribute( key ){

return memcachedClient.get (session.getId() + key);

}

void setAttribute( key, value ){

memcachedClient.setObject(session.getId() + key, value);

}

}

不同计算机上的应用程序通过一个IP地址来访问memcahced Server。

同一个key对应的数据,只存在于一台memcached server的一份内存中。

memcached server也可以部署在多台计算机上。Memcached通过key的hashcode来判断从哪台memcached server上存取数据数据。我们可以看到,同一个key对应的数据,还是只存在于一台memcached server的一份内存中。

所以,memcached不存在数据同步的问题。这个特性很关键,我们后面讲到Cluster Cache的时候,就会涉及到数据同步的问题。

memcached由于是远程Cache,要求放到Cache的Key和Value都是Serializable。

远程Cache,最令人担心的网络通信开销。据有经验的人说,memcached网络通信开销很小。

memcached的API设计也是远程通信友好的,提供了getMulti()等高粒度的调用方法,能够批量获取数据,从而减少网络通信次数。

0 0