作者:姚星火 个人主页: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),把value的hash值(有几种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);//如果取到数据
}
分享到:
相关推荐
Memcached的工作原理是基于键值对存储,它将数据存储在内存中,以便快速访问。当应用程序请求数据时,Memcached首先检查是否已经在缓存中,如果存在,就直接返回,避免了对数据库的昂贵查询,从而提高了响应速度。 ...
**基本原理** 1. **内存存储**:Memcached 将所有数据存储在内存中,因此读取速度非常快。不过,这也意味着如果系统崩溃或重启,缓存中的数据将会丢失,因此不提供持久化存储。 2. **非单点设计**:尽管每个 ...
它的工作原理是将数据存储在内存中,通过键值对的形式进行访问,以实现快速的数据读取。Windows 版本的 Memcached 可以在本地或网络环境中运行,为多个应用程序提供高速缓存服务。安装和配置 Memcached for Windows...
Spring Memcached 是一个用于在Spring应用中集成Memcached缓存服务的框架。Memcached是一种分布式内存对象缓存系统,常用于提高网站数据读取...通过源码分析,我们可以了解其工作原理,并根据实际需求进行调整和优化。
MemcachedClient client = new MemcachedClient(new InetSocketAddress("localhost", 11211)); ``` - 存储和获取数据: ```java client.set("key", 60, "value"); // 存储数据,60秒后过期 String value = ...
MemcachedClient client = new MemcachedClient(new InetSocketAddress("localhost", 11211)); client.set("myKey", 60, "myValue"); // 存储数据,有效期60秒 String value = (String) client.get("myKey"); // ...
本资料包包含“Memcached实例与文档”,是学习和理解Memcached工作原理及应用的重要资源。 一、Memcached的基本概念 Memcached基于键值对(key-value)存储,提供简单的文本协议,易于与其他编程语言集成。它的设计...
通过简单地连接、存储、获取和删除数据,你可以快速理解Memcached的基本工作原理。在实际应用中,可以根据需求调整缓存策略,优化性能,并考虑与其他技术(如Spring框架)的整合,以实现更复杂的缓存管理。在压缩包...
**工作原理** Memcached通过TCP协议进行通信,服务器端接收客户端的请求,将数据存储到内存中,并为每个数据项设置一个过期时间。当客户端需要数据时,会首先查询Memcached,如果缓存中有数据,就直接返回,称为...
Memcached的工作原理** Memcached基于一个简单的键值对存储模型。当客户端向服务器发送请求时,服务器会根据键查找对应的数据,如果存在,则返回给客户端;如果不存在,就从源数据源获取数据并存储到内存中,然后...
MemcachedClient client = new MemcachedClient(new InetSocketAddress("localhost", 11211)); ``` 3. **操作缓存**:一旦连接建立,你可以使用客户端提供的方法来操作缓存。例如,存入一个键值对: ```java ...
MemcachedClientIF factory = new MemcachedClient(new BinaryConnectionFactory(), AddrUtil.getAddresses("127.0.0.1:11211")); try { // 设置键值对 factory.set("key", 60, "value").get(); // 60秒后过期 ...
MemcachedClient client = new MemcachedClient(new InetSocketAddress("localhost", 11211)); ``` 3. **操作缓存**:一旦建立连接,就可以使用API进行数据的存取操作。如存储一个键值对: ```java client.set...
#### Memcached的工作原理 - **基于C/S架构**:Memcached采用客户端/服务器(Client/Server)架构设计,客户端负责与Memcached服务器进行通信并发送请求,服务器则负责存储和检索数据。 - **简单的文本协议**:...
memcached 的工作原理是将数据与对象缓存在内存中,能够减少对数据库的读取次数,从而提高网站的整体响应速度。 二、memcached 在 PHP 下的应用 memcached 在 PHP 下的应用主要有两种方式:其一是利用 PHP 中的 ...
MemcachedClient client = new MemcachedClient(new InetSocketAddress("localhost", 11211)); // 存储数据 client.set("myKey", 60, "myValue"); // key存活60秒 // 获取数据 String value = (String) ...
Memcached是一种高性能、分布式内存对象缓存系统,用于在分布式环境中快速...同时,理解Memcached的数据模型(如键值对、生存时间和CAS(Compare and Swap)操作)以及其工作原理,有助于更好地利用这个高效缓存系统。
Set memcached = Server.CreateObject("MemcachedClient.Memcached") memcached.Connect "localhost", 11211 '连接到Memcached服务器 key = "myKey" value = "this is a test value" '存储数据 memcached.Set key,...
MemcachedClient mc = new MemcachedClient(); mc.PoolName = "test"; mc.EnableCompression = false; ``` 2. 往分布式缓存系统中添加或更新数据。在本例中,我们使用了一个可序列化的`Student`对象。 ```csharp ...
Memcached 的工作原理是基于键值对,允许应用程序将小块数据(如网页组件)存储在内存中,以便在后续请求时能够快速检索,而无需每次查询数据库。 服务端: Memcached 服务端是运行在服务器上的程序,负责接收...