`

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

阅读更多
http://www.danga.com/memcached/

    memcached是一个Client Server结构的远程Cache实现,Server是用C写的,提供了多种语言的客户端API,包括Java, C#, Ruby, Python, PHP, Perl, C等多种语言。

memcached主要使用在Shared Nothing Architecture中。
引用
Shared Nothing Architecture(无分享架构)是一个分布式的架构,每个节点都是独立的。


应用程序通过客户端API,从memcached server存取数据,典型的应用:

1:用memcached作为数据库缓存。
2:用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()等高粒度的调用方法,能够批量获取数据,从而减少网络通信次数。


Memcached是由Danga Interactive开发,高性能、分布式的内存对象缓存系统,用于减少数据库负荷,提升访问速度,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
      
设计之初,用于提升LiveJournal.com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。

1:如何使用memcached-Server端?
在服务端运行:
# ./memcached -d -m 2048 -l 10.0.0.40 -p 11211
这将会启动一个占用2G内存的进程,并打开11211端口用于接收请求。由于32位系统只能处理4G内存的寻址,所以在大于4G内存使用PAE的32位服务器上可以运行2-3个进程,并在不同端口进行监听。
  
2:如何使用memcached-Client端?
在应用端包含一个用于描述Client的Class后,就可以直接使用,非常简单。


一. memcached是什么?

memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。现在已成为 mixi、 hatena、 Facebook、 Vox、LiveJournal等众多服务中 提高Web应用扩展性的重要因素。

emcached是高性能的分布式内存缓存服务器。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。



二. 内置内存存储方式

为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。 由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。 另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。 memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。

三. memcached不互相通信的分布式

memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。 各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢? 这完全取决于客户端的实现。



  • 大小: 28.2 KB
  • 大小: 11.7 KB
分享到:
评论

相关推荐

    memcached安装及java应用使用memcached

    “memcached安装及java应用使用memcached”这一标题暗示了我们要讨论的是一个关于分布式内存缓存系统——memcached的安装过程以及如何在Java应用程序中使用它。Memcached是一个高性能、轻量级的分布式内存对象缓存...

    memcached安装包以及MemCachedClient

    对于 Java 开发者,`MemCachedClient` 是一个常用的 Memcached 客户端库。这里我们关注的是 `java_memcached-release_2.6.6.jar` 文件,这是 Spymemcached 库的一个版本,它提供了与 Memcached 服务器通信的接口。 ...

    用Memcached 实现简单Session Cache Server

    本文将深入探讨如何使用Memcached来实现一个简单的Session Cache Server,以此解决在Tomcat集群中的Session共享问题。 首先,我们来了解Session Cache Server的作用。Session Cache Server是一种集中式的缓存服务,...

    hibernate-memcached包

    **hibernate-memcached包** 是一个专为Hibernate框架设计的扩展,目的是将流行的分布式内存缓存系统Memcached整合到Hibernate中,作为其二级缓存解决方案。在大型分布式应用中,缓存技术是提高性能的关键,特别是...

    memcached-win32-server1.26服务端与客户端Enyim.Caching与Memcached.ClientLibrary

    包含服务端: memcached-win32.server.1.2.6.0 memcached-win32.server.1.4.4 包含客户端: Enyim.Caching1.2.0.0.dll Enyim.Caching2.12.0.0.dll Memcached.ClientLibrary1.0.0 安装说明文档

    spring整合memcached

    3. **创建Memcached模板**:使用Spring Data的抽象层,创建一个MemcachedTemplate,它是操作Memcached的工具类: ```xml ``` 4. **配置Memcached连接工厂**:创建并配置MemcachedConnectionFactory,用于...

    MemCached Cache Java Client封装优化历程.docx

    Memcached 是一个高性能、分布式的内存对象缓存系统,主要用于减少数据库的负载,提高应用程序的性能。它通过在内存中存储数据来提供快速访问,而不是每次请求时都去查询数据库。Memcached 的设计目标是简洁、高效,...

    memcachedclient-2.0.1.jar

    memcachedclient-2.0.1.jar 之前在网上搜了很久没搜到,所以找到了跟大家分享

    memcaChed java client jar包

    Spymemcached是一个流行的Java Memcached客户端,它支持异步操作,并且性能出色。使用Spymemcached时,你需要导入对应的JAR文件,然后可以通过以下步骤进行操作: 1. 创建Memcached客户端实例: ```java Memcached...

    memcached java client

    memcache-client-forjava是另一个Java Memcached客户端实现,它简化了与Memcached服务器的交互。其特点包括: - **简单易用**:API设计简洁,易于理解和使用,适合快速集成到项目中。 - **线程安全**:客户端内部...

    Memcached-Java-Client-release_2.6.1.zip

    - 创建一个简单的Java应用,使用Memcached-Java-Client 2.6.1实现用户登录信息的缓存,提高登录速度。 - 演示如何在Spring框架中配置和使用Memcached,结合Spring的AOP特性实现自动缓存管理。 通过以上内容,我们...

    java_memcached-release_2.6.3.zip

    然后,通过`MemcachedClient`类实例化一个客户端,并配置连接到一个或多个Memcached服务器。例如,使用TCP协议连接,可以这样做: ```java import net.spy.memcached.*; // 创建一个MemcachedClient实例 Memcached...

    java-memcached-2.6.6.jar

    java-memcached-2.6.6.jar

    基于memcached client for java的cache封装

    通过以上介绍,我们可以看出基于Java的Memcached客户端封装是一个涉及到连接管理、操作接口设计、异常处理、缓存策略等多个方面的复杂任务。正确地封装和使用Memcached客户端,可以显著提升Java应用的性能,减少对...

    Memcached-Java-Client-3.0.2.jar

    Memcached-Java-Client-3.0.2.jar

    php memcached 缓存

    2. **连接Memcached服务器**: 使用`Memcached::addServer()`或`Memcached::setServerParams()`方法指定服务器地址和端口。 3. **存储数据**: `Memcached::set()`用于设置键值对,`Memcached::add()`则在键不存在时...

    c# asp.net memcached client 调用示例

    在C#代码中,可以创建一个`MemcachedClient`实例,并设置服务器的连接信息。例如: ```csharp var client = new MemcachedClient(); client.Connect("127.0.0.1", 11211); // 假设Memcached服务器运行在本地,端口...

    memcached for java client 例子

    "memcached for java client 例子" 指的是一个使用Java语言编写的客户端库,用于与memcached缓存系统进行交互。Memcached是一种高性能、分布式内存对象缓存系统,常用于减轻数据库负载,提升Web应用的响应速度。 **...

    p5-keyedmutex-memcached:使用 memcached 的键控互斥锁

    my $cache = Cache::Memcached::Fast->new( ... );my $mutex = KeyedMutex::Memcached->new( cache => $cache );until ( my $value = $cache->get($key) ) { { if ( my $lock = $mutex->lock( $key, 1 ) ) { #locked...

    memcached client for java

    memcached的java客户端jar包,方便调用memcached的服务

Global site tag (gtag.js) - Google Analytics