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

【memcached】自动维护线程

阅读更多

在SockIOPool中,有一个类:MaintThread

 

是Pool的自我维护的线程类。

 

这个类的使用,看代码是要自己创建一个实例,输入SockIOPool对象进去进行运转;

 

---------------------------------------------------------------------------------------------------------------------------

 

在最新的2.6.1版本中,没有看到有维护线程的启动,在2.0版本,在初始化的时候,维护线程就启动了:

	/** 
	 * Initializes the pool. 
	 */
	public void initialize() {

		synchronized( this ) {

			// check to see if already initialized
			if ( initialized
					&& ( buckets != null || consistentBuckets != null )
					&& ( availPool != null )
					&& ( busyPool != null ) ) {
				log.error( "++++ trying to initialize an already initialized pool" );
				return;
			}

			// pools
			availPool   = new HashMap<String,Map<SockIO,Long>>( servers.length * initConn );
			busyPool    = new HashMap<String,Map<SockIO,Long>>( servers.length * initConn );
			deadPool    = new IdentityHashMap<SockIO,Integer>();

			hostDeadDur = new HashMap<String,Long>();
			hostDead    = new HashMap<String,Date>();
			createShift = new HashMap<String,Integer>();
			maxCreate   = (poolMultiplier > minConn) ? minConn : minConn / poolMultiplier;		// only create up to maxCreate connections at once

			log.debug( "++++ initializing pool with following settings:" );
			log.debug( "++++ initial size: " + initConn );
			log.debug( "++++ min spare   : " + minConn );
			log.debug( "++++ max spare   : " + maxConn );

			// if servers is not set, or it empty, then
			// throw a runtime exception
			if ( servers == null || servers.length <= 0 ) {
				log.error( "++++ trying to initialize with no servers" );
				throw new IllegalStateException( "++++ trying to initialize with no servers" );
			}

			// initalize our internal hashing structures
			if ( this.hashingAlg == CONSISTENT_HASH )
				populateConsistentBuckets();
			else
				populateBuckets();

			// mark pool as initialized
			this.initialized = true;

			// start maint thread
			if ( this.maintSleep > 0 )
				this.startMaintThread();
		}
	}
 

在最后,如果设置的维护时间大于0,就会启动维护线程

 

分享到:
评论

相关推荐

    Memcached-1.49 源代码

    10. **社区支持**:作为开源项目,Memcached拥有活跃的开发者社区,不断进行维护和更新。这使得用户可以获取到及时的技术支持,同时也有丰富的第三方库和工具可供选择。 通过深入研究Memcached-1.49的源代码,...

    danga memcached使用

    4. **缓存淘汰策略**:当内存空间不足时,memcached会根据LRU(Least Recently Used)最近最少使用原则自动淘汰旧数据。 **二、danga memcached的特性** 1. **轻量级**:memcached占用资源少,启动快速,易于部署和...

    memcached-1.5.12.tar.gz

    - memcached 使用 TCP 或 UDP 协议在客户端和服务器之间通信,支持多线程处理,具有低延迟和高吞吐量的特性。 - 由于其内存存储的特性,它不适合存储大量的持久化数据,但非常适合缓存短期、频繁访问的数据。 2. ...

    Memcached 服务端,客户端,C#

    1. 连接管理:建立和维护到Memcached服务端的连接。 2. 数据操作:设置、获取、删除、替换、追加、预追加等基本操作。 3. 序列化:如果存储的对象不是字符串,客户端库通常会提供序列化和反序列化的机制,将对象转换...

    MemCached Provider客户端

    当 Memcached 服务器出现故障时,`MemcachedProviders` 应该能够自动检测并切换到其他健康的服务器,保证服务的连续性。 7. **数据序列化**: 对于非原始类型的数据,如自定义对象,`MemcachedProviders` 可能会...

    memcached-win64-1.4.4-14

    5. **高性能**:通过多线程模型和非阻塞I/O,Memcached能处理大量并发请求,确保服务的高可用性。 6. **可扩展性**:通过增加更多的服务器节点,可以轻松扩展Memcached集群,应对更大的数据量和更高的并发。 **...

    memcached .net

    1. **连接管理**: Memcached .NET 库负责建立和维护到Memcached服务器的连接,支持TCP和UDP协议。 2. **操作接口**: 提供了丰富的API,包括添加、获取、替换、删除键值对,以及增加、减少数值等操作。 3. **序列化...

    memcached java源码(performance分支)

    1. **连接管理**:如`MemcachedClient`,负责建立和维护与Memcached服务器的连接。 2. **操作接口**:如`MemcachedClient#set`、`get`、`delete`等,实现基本的增删查改操作。 3. **批量操作**:支持一次处理多个...

    memcached java client

    Memcached是一种高性能、分布式内存对象缓存系统,...根据具体项目需求和团队技术栈,选择合适的客户端可以有效提升应用程序的性能和可维护性。在实际使用过程中,应充分理解客户端的特性和用法,以发挥其最大价值。

    memcached for java client 例子

    10. **监控与维护**:监控memcached的内存使用情况、命中率、错误日志等,以便及时调整参数或扩展服务器资源。 综上所述,这个压缩包中的"JAVA工程"可能是演示了如何在Java应用程序中使用memcached客户端进行数据...

    memcached客户端所需jar包

    Xmemcached是一个高性能、线程安全的Java Memcached客户端,它支持异步操作,提供全面的API和配置选项。版本号2.6.6表明这是该客户端的一个具体发行版。 使用这些客户端库时,开发者需要理解以下关键概念和API: -...

    java_memcached-release_2.6.6.rar

    Java Memcached客户端通常支持CAS(Compare and Swap)操作,这是一种无锁算法,可以保证在多线程环境下的数据一致性。 7. **性能优化**:为了提高性能,Java Memcached客户端可能会采用批量操作,如批量设置、获取...

    PHP100视频教程74:PHP.MemCached.高级缓存应用.rar

    利用PHP的多线程或异步特性,可以同时执行多个Memcached操作,提高效率。 2. 适当分片: 大型应用可以配置多个Memcached实例,并根据业务逻辑进行数据分片,分散负载。 3. 选择合适的缓存策略: 根据数据访问模式...

    Memcached源码剖析笔记

    5. **并发处理**:Memcached 使用单线程模型处理客户端请求,但可以通过多实例部署实现更高的并发处理能力。 6. **持久化**:Memcached 默认不支持数据持久化,即重启服务后所有的缓存数据将会丢失。若需要持久化...

    memcached-1.2.6-win32

    1. **基本概念**:Memcached是由Danga Interactive创建的,现在由社区维护。它是一个基于内存的键值存储系统,用于临时存储(缓存)中间结果或数据,以提高Web应用程序的速度。 2. **工作原理**:Memcached通过在...

    Memcached Client 使用手册

    `maintSleep`属性控制了连接池维护线程的活动间隔;`socketTO`设置了Socket操作超时时间;`aliveCheck`属性决定了是否在使用前进行Socket存活检测。 - **`&lt;servers&gt;`标签**:指定了Memcached服务端的地址列表,支持...

    Memcached负载均衡Jar包

    这个"Memcached负载均衡Jar包"很可能包含了一个或多个这样的库,比如Xmemcached或者Spymemcached,这些库支持配置多个Memcached服务器,并自动处理请求的分发。 Xmemcached是一个功能强大的Java客户端,提供了线程...

    java_memcached-release_2.6.2.zip

    7. **故障恢复**:如果一个Memcached服务器出现问题,客户端库可以自动检测并切换到其他可用服务器,保证服务的连续性。 在"java_memcached-release_2.6.2"这个版本中,可能包含以下内容: - **源代码**:开发者...

    java面试题

    - **并发处理**:Redis 是单线程模型,而 memcached 是多线程模型。 2. **项目选择** - 如果需要处理复杂的数据结构并且希望数据持久化,推荐使用 Redis。 - 如果需要处理大量缓存数据且对性能要求极高,...

    Redis大厂常见面试题

    - **线程模型**:Redis单线程模型避免了锁竞争,Memcached采用多线程加锁方式。 - **内存管理**:Redis允许部分数据不在内存,Memcached全内存。 - **高可用性**:Redis原生支持高可用特性,而Memcached需要额外...

Global site tag (gtag.js) - Google Analytics