好了 继续我的代码研究之旅。
昨天晚上 看了一致性hash算法 拍案叫绝
请看如下代码:
//创建链接
for ( int j = 0; j < initConn; j++ ) {
SockIO socket = createSocket( servers[i] );
if ( socket == null ) {
log.error( "++++ failed to create connection to: " + servers[i] + " -- only " + j + " created." );
break;
}
//加入socket到连接池 这里慢慢谈
addSocketToPool( availPool, servers[i], socket );
if ( log.isDebugEnabled() )
log.debug( "++++ created and added socket: " + socket.toString() + " for host " + servers[i] );
}
先创建SockIO
SockIO socket = createSocket( servers[i] );
创建socket代码如下:
protected static Socket getSocket( String host, int port, int timeout ) throws IOException {
SocketChannel sock = SocketChannel.open();
sock.socket().connect( new InetSocketAddress( host, port ), timeout );
return sock.socket();
}
那如何将数据添加到可用池中呢?
如下代码:
protected void addSocketToPool( Map<String,Map<SockIO,Long>> pool, String host, SockIO socket ) {
if ( pool.containsKey( host ) ) {
Map<SockIO,Long> sockets = pool.get( host );
if ( sockets != null ) {
sockets.put( socket, new Long( System.currentTimeMillis() ) );
return;
}
}
Map<SockIO,Long> sockets =
new IdentityHashMap<SockIO,Long>();
sockets.put( socket, new Long( System.currentTimeMillis() ) );
pool.put( host, sockets );
}
分享到:
相关推荐
4. **Socket 通信**:Memcached 使用 TCP 或 UDP 通信协议,客户端可以选择使用同步或异步的网络 I/O 模型。数据传输前需要序列化,为了降低开销,建议存储较小的数据,如字符串。 5. **特殊的内存分配机制**:...
本文主要介绍了Memcached的基本概念及其Java客户端库的使用方法,特别是针对`MemcachedClient`的接口定义、依赖配置以及配置文件的细节进行了详细解释。通过这些知识点的学习,读者可以更好地理解和掌握如何在实际...
<bean id="memcachedClient" class="com.danga.MemCached.MemCachedClient"> ... ``` 这段配置指定了Memcached的连接池参数,如服务器地址、初始连接数、最小和最大连接数等,以及客户端的一些特性,如是否...
1. **MemcachedClient**: 这是客户端的主要类,负责建立与memcached服务器的连接,执行各种操作。 2. **Operation**: 包含了各种操作接口,如`get`, `set`, `delete`, `increment`等,它们是异步执行的。 3. **...
首先,我们来看`MemCachedClient`类,这是Java客户端与Memcached服务器进行交互的主要接口。这个类通常包含初始化、设置服务器池、添加、删除、获取和更新缓存项等方法。例如,它可能有一个构造函数用于设置服务器...
"C# Memcached client.zip" 文件可能包含了一个用C#编写的Memcached客户端库的源代码,供开发者集成到他们的.NET应用中。 Memcached的工作原理是基于键值对存储,它将数据存储在内存中,以便快速访问。当应用程序...
在Java中,我们可以使用各种客户端库与Memcached通信,如Spymemcached、Xmemcached、MemcachedClient等。这些库提供了方便的方法来操作Memcached服务器,包括设置、获取、删除和过期等操作。 3. **源码结构分析** ...
在使用Java客户端与Memcached交互时,通常需要进行以下优化: 1. **连接池管理**:为了减少连接创建和销毁的开销,使用连接池管理多个连接。 2. **序列化优化**:选择高效的序列化方案,如Google的Protobuf或Jackson...
1. **MemcachedClient for Java**:这是一种较早出现的客户端,以其稳定性和广泛应用而著称。 2. **SpyMemcached**:相比于MemcachedClient for Java,它在性能上有一定的优化。 3. **XMemcached**:该客户端在并发...
1. **连接管理**:客户端需要建立到Memcached服务器的连接,这通常涉及到Socket通信和连接池的实现。连接管理模块负责创建、管理和复用这些连接,以提高效率并减少资源消耗。 2. **命令编码与解码**:Memcached使用...
### Memcached Client 使用手册 #### Cache Client 接口定义与功能概述 - **ICache**:作为缓存的基础接口,提供了缓存的基本操作方法。这些方法涵盖了缓存数据的存储、检索、删除等功能,旨在为应用程序提供高效...
Memcached Cache现在已经被大家广泛使用,但是千万不要认为对Cache的操作是低损耗的,要知道这类集中式Cache对Socket连接数(会牵涉到linux操作系统文件句柄可用数),带宽,网络IO都是有要求的,有要求就意味着会有...
本文档主要针对的是一个经过优化的Memcached客户端,它在性能上优于传统的Java客户端。Memcached是一种分布式内存缓存系统,常用于减轻数据库的负载,提高应用程序的响应速度。这个优化版客户端尤其适用于Java开发...
2. `<client>` 标签:定义客户端实例,`name`属性用于标识,`compressEnable`控制压缩,`defaultEncoding`设置默认编码,`socketpool`引用Socket连接池配置。 3. `<errorHandler>` 标签(可选):用于指定错误处理器...
### Java开发中的Memcache原理及实现 #### 一、概述 **1.... Memcache(Memcached)是一种高...在实际开发过程中,还需要进一步学习如何编写Java代码与Memcached交互,以及如何有效地利用Memcached提高应用程序性能。
MemcachedClient memCachedClient = new MemcachedClient(pool); for (int i = 0; i ; i++) { String result = (String) memCachedClient.get("" + i); // 读取缓存 } ``` 3. **Memcache与Tomcat、Nginx结合**...