`
yaoxinghuo
  • 浏览: 30224 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Memcached Client工作原理

阅读更多

作者:姚星火 个人主页:http://fantasyplace.googlepages.com/index.html

Memcached Client工作原理

static {

String[] serverlist = { “cache0.server.com:12345”,“cache1.server.com:12345” };

SockIOPool pool = SockIOPool.getInstance();

pool.setServers(serverlist);

pool.initialize();

}


执行静态代码后,会把serverlist缓存在List buckets中,备用;

储存对象时,如果是set(key,value,hashcode),根据hashcode除以server数量的余数(如果是负数就乘以-1)首先决定存储在哪台server上,但如果这台server死了,会循环从serverlist中再选一台活着的server;如果是set(key,value),把valuehash值(有几种hash算法可以选择)除以server数量的余数决定储存在那台server上。

获取对象的时候,也是用同样的算法首先决定从哪台server上获取数据。

设置hash算法的代码:

/**

* Sets the hashing algorithm we will use.

*

* The types are as follows.

*

* SockIOPool.NATIVE_HASH (0) - native String.hashCode() - fast (cached) but

* not compatible with other clients SockIOPool.OLD_COMPAT_HASH (1) -

* original compatibility hashing alg (works with other clients)

* SockIOPool.NEW_COMPAT_HASH (2) - new CRC32 based compatibility hashing

* algorithm (fast and works with other clients)

*

* @param alg

* int value representing hashing algorithm

*/

public void setHashingAlg(int alg) {

this.hashingAlg = alg;

}

客户端这样写:

static {

String[] serverlist = { “cache0.server.com:12345”,“cache1.server.com:12345” };

SockIOPool pool = SockIOPool.getInstance();

pool.setServers(serverlist);

pool.setHashingAlg(SockIOPool.NEW_COMPAT_HASH);

pool.initialize();

}

所以Server之间没有备抄数据,可能它的初衷是为了获得高的性能而牺牲稳定性吧,不过修改Memcached Client的代码,增加一个定时执行daemon,把数据抄到其它的server上,修改存取对象的算法也可以实现。如果不修改Memcached Client代码,在使用的时,一般可以这样做:

String value=null;

if(memcachedClient.get(key)==null){//如果取不到数据,或者数据已经过期

value=getValueFromDB();//从数据库中取出数据,使用

memcachedClient.set(key,value);//把数据存入memcached,备用

} else {

value=memcachedClient.get(key);//如果取到数据

}

分享到:
评论

相关推荐

    C# Memcached client.zip

    Memcached的工作原理是基于键值对存储,它将数据存储在内存中,以便快速访问。当应用程序请求数据时,Memcached首先检查是否已经在缓存中,如果存在,就直接返回,避免了对数据库的昂贵查询,从而提高了响应速度。 ...

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

    **基本原理** 1. **内存存储**:Memcached 将所有数据存储在内存中,因此读取速度非常快。不过,这也意味着如果系统崩溃或重启,缓存中的数据将会丢失,因此不提供持久化存储。 2. **非单点设计**:尽管每个 ...

    memcached 完整的项目,服务端(win) 客户端 包括jar包

    它的工作原理是将数据存储在内存中,通过键值对的形式进行访问,以实现快速的数据读取。Windows 版本的 Memcached 可以在本地或网络环境中运行,为多个应用程序提供高速缓存服务。安装和配置 Memcached for Windows...

    Spring memcached 源码

    Spring Memcached 是一个用于在Spring应用中集成Memcached缓存服务的框架。Memcached是一种分布式内存对象缓存系统,常用于提高网站数据读取...通过源码分析,我们可以了解其工作原理,并根据实际需求进行调整和优化。

    memcached官方jar和一些网上的资料

    MemcachedClient client = new MemcachedClient(new InetSocketAddress("localhost", 11211)); ``` - 存储和获取数据: ```java client.set("key", 60, "value"); // 存储数据,60秒后过期 String value = ...

    memcached完整jar包及实例

    MemcachedClient client = new MemcachedClient(new InetSocketAddress("localhost", 11211)); client.set("myKey", 60, "myValue"); // 存储数据,有效期60秒 String value = (String) client.get("myKey"); // ...

    Memcached实例与文档

    本资料包包含“Memcached实例与文档”,是学习和理解Memcached工作原理及应用的重要资源。 一、Memcached的基本概念 Memcached基于键值对(key-value)存储,提供简单的文本协议,易于与其他编程语言集成。它的设计...

    memcached 的简单java实例

    通过简单地连接、存储、获取和删除数据,你可以快速理解Memcached的基本工作原理。在实际应用中,可以根据需求调整缓存策略,优化性能,并考虑与其他技术(如Spring框架)的整合,以实现更复杂的缓存管理。在压缩包...

    缓存服务器memcached代码及使用文档

    **工作原理** Memcached通过TCP协议进行通信,服务器端接收客户端的请求,将数据存储到内存中,并为每个数据项设置一个过期时间。当客户端需要数据时,会首先查询Memcached,如果缓存中有数据,就直接返回,称为...

    Memcached入门(附安装包及测试代码)

    Memcached的工作原理** Memcached基于一个简单的键值对存储模型。当客户端向服务器发送请求时,服务器会根据键查找对应的数据,如果存在,则返回给客户端;如果不存在,就从源数据源获取数据并存储到内存中,然后...

    Memcached Demo 01.zip

    MemcachedClient client = new MemcachedClient(new InetSocketAddress("localhost", 11211)); ``` 3. **操作缓存**:一旦连接建立,你可以使用客户端提供的方法来操作缓存。例如,存入一个键值对: ```java ...

    Memcached的jar包

    MemcachedClientIF factory = new MemcachedClient(new BinaryConnectionFactory(), AddrUtil.getAddresses("127.0.0.1:11211")); try { // 设置键值对 factory.set("key", 60, "value").get(); // 60秒后过期 ...

    memcached版本包

    MemcachedClient client = new MemcachedClient(new InetSocketAddress("localhost", 11211)); ``` 3. **操作缓存**:一旦建立连接,就可以使用API进行数据的存取操作。如存储一个键值对: ```java client.set...

    Memcached原理和使用详解

    #### Memcached的工作原理 - **基于C/S架构**:Memcached采用客户端/服务器(Client/Server)架构设计,客户端负责与Memcached服务器进行通信并发送请求,服务器则负责存储和检索数据。 - **简单的文本协议**:...

    memcached在PHP下应用研究.pdf

    memcached 的工作原理是将数据与对象缓存在内存中,能够减少对数据库的读取次数,从而提高网站的整体响应速度。 二、memcached 在 PHP 下的应用 memcached 在 PHP 下的应用主要有两种方式:其一是利用 PHP 中的 ...

    Java开发中的Memcache原理及实现

    MemcachedClient client = new MemcachedClient(new InetSocketAddress("localhost", 11211)); // 存储数据 client.set("myKey", 60, "myValue"); // key存活60秒 // 获取数据 String value = (String) ...

    memcached-java链接所需jar包,以及java链接代码

    Memcached是一种高性能、分布式内存对象缓存系统,用于在分布式环境中快速...同时,理解Memcached的数据模型(如键值对、生存时间和CAS(Compare and Swap)操作)以及其工作原理,有助于更好地利用这个高效缓存系统。

    Memcached For ASP

    Set memcached = Server.CreateObject("MemcachedClient.Memcached") memcached.Connect "localhost", 11211 '连接到Memcached服务器 key = "myKey" value = "this is a test value" '存储数据 memcached.Set key,...

    分布式缓存系统Memcached简介及开发环境搭建

    MemcachedClient mc = new MemcachedClient(); mc.PoolName = "test"; mc.EnableCompression = false; ``` 2. 往分布式缓存系统中添加或更新数据。在本例中,我们使用了一个可序列化的`Student`对象。 ```csharp ...

    Memcached 服务端,客户端,C#

    Memcached 的工作原理是基于键值对,允许应用程序将小块数据(如网页组件)存储在内存中,以便在后续请求时能够快速检索,而无需每次查询数据库。 服务端: Memcached 服务端是运行在服务器上的程序,负责接收...

Global site tag (gtag.js) - Google Analytics