`
meiyx
  • 浏览: 183658 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

memcached集群开发

阅读更多
memcached是高性能的分布式内存缓存服务器。一般的使用目的
是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展
性。
1 确保libevent 和memcacahed 安装成功,并且启动
2 配置文件memcached.properties---memcached Server 配置
memcached.servers=10.100.1.117:11211,10.100.120.185:11211
memcached.weights=3,2
memcached.initConn=100
memcached.minConn=20
memcached.maxConn=1024
memcached.socketTimeout=3000
memcached.maintSleep=5000
#memcached yes/no
memcached.isEnable=yes
memcached.commonCacheTime=600000000
#categories cached time: (30 daies)
memcached.categoriesCacheTime=2592000000
#downTicket cache time: (one day)
memcached.downTicketCacheTime=86400000
memcached 分布式开发就是在此配置文件中配置多了servers 和 weights。当然你也可以不用配置配置文件直接在程序中写


之后java代码解析我把我项目中用的拷个大家供大家参考
public class MCLoader {

	private static MCLoader loader = new MCLoader();
	private Properties p = new Properties();

	private MCLoader() {
		try {
			InputStream in = this.getClass().getClassLoader().getResourceAsStream("memcached.properties");
			p.load(in);
		} catch (IOException e1) {
			e1.printStackTrace();
		}
	}

	public final static MCLoader getInstance() {
		return loader;
	}

	public Object get(String key) {
		return p.get(key);
	}
}


public class MemCacheMgr {
	private static MemCacheMgr _instance = new MemCacheMgr();
	private MemCachedClient mc = null;

	public static MemCacheMgr getInstance() {
		return _instance;
	}

	public Date getTime(String key) {
		Calendar c = Calendar.getInstance();
		long cacheTime = System.currentTimeMillis()
				+ Long.parseLong((String) MCLoader.getInstance().get(key));
		Date ct = null;
		c.setTimeInMillis(cacheTime);
		ct = c.getTime();
		return ct;
	}

	public Date getTime() {
		Calendar c = Calendar.getInstance();
		long cacheTime = System.currentTimeMillis()
				+ Long.parseLong((String) MCLoader.getInstance().get(
						"memcached.cacheTime"));
		Date ct = null;
		c.setTimeInMillis(cacheTime);
		ct = c.getTime();
		return ct;
	}

	private MemCacheMgr() {
		String[] serverArray = null;
		Integer[] weights = null;
		String[] weightsArray = null;

		String serverList = (String) MCLoader.getInstance().get(
				"memcached.servers");
		String weightList = (String) MCLoader.getInstance().get(
				"memcached.weights");
		int initConn = Integer.parseInt((String) MCLoader.getInstance().get(
				"memcached.initConn"));
		int minConn = Integer.parseInt((String) MCLoader.getInstance().get(
				"memcached.minConn"));
		int maxConn = Integer.parseInt((String) MCLoader.getInstance().get(
				"memcached.maxConn"));
		int socketTimeOut = Integer.parseInt((String) MCLoader.getInstance().get(
				"memcached.socketTimeout"));
		int maintSleep = Integer.parseInt((String) MCLoader.getInstance().get(
				"memcached.maintSleep"));

		if (serverList.indexOf(",") > 0) {
			serverArray = serverList.split(",");
			System.out.println(serverArray);
		} else {
			serverArray = new String[] { serverList };
			System.out.println(serverArray);
		}
		if (weightList.indexOf(",") > 0) {
			weightsArray = weightList.split(",");
			Integer[] weightsI = new Integer[weightsArray.length];
			for (int i = 0; i < weightsArray.length; i++) {
				weightsI[i] = Integer.parseInt(weightsArray[i]);
			}
			weights = weightsI;
		} else {
			weights = new Integer[] { Integer.parseInt(weightList) };
		}
		// initialize the pool for memcache servers
		SockIOPool pool = SockIOPool.getInstance();
		pool.setServers(serverArray);
		pool.setWeights(weights);
		pool.setInitConn(initConn);
		pool.setMinConn(minConn);
		pool.setMaxConn(maxConn);
		pool.setMaintSleep(maintSleep);
		pool.setNagle(false);
		pool.setSocketTO(socketTimeOut);
		pool.setHashingAlg(SockIOPool.CONSISTENT_HASH);
		pool.initialize();
		mc = new MemCachedClient();
	}

	public MemCachedClient getCache() {
		return mc;
	}

	/**
	 * public void set(String key, String value) { set(key, value, null); }
	 */

	public void set(String key, String value, String timeStr) {
		MemCachedClient mc = MemCacheMgr.getInstance().getCache();
		Long cacheTime = null;
		String cacheTimeValue = "";

		if (StringUtil.isNotEmpty(timeStr)) {
			try {
				cacheTimeValue = (String) MCLoader.getInstance().get(timeStr);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		if (StringUtil.isNotEmpty(cacheTimeValue)) {
			cacheTime = Long.parseLong(cacheTimeValue);
		} else {
			cacheTime = Long.parseLong((String) MCLoader.getInstance().get(
					"memcached.commonCacheTime"));
		}

		Calendar c = Calendar.getInstance();
		c.setTimeInMillis(cacheTime);
		Date ct = c.getTime();
		mc.set(key, value, ct);

	}

	/**
	 * 根据key从memcached服务中取得value
	 * 
	 * @param key
	 * @return
	 */
	public String getValue(String key) {
		String value = (String) mc.get(key);
		return value;
	}

	public static void main(String[] args) {

		//_instance.set("test", "gga22", "100000");
//    	 _instance.getInstance().mc.flushAll();//清空memecache 服务的缓存数据
		 System.out.println(_instance.getValue("eps.freetoplist1"));
		
	}

之后你就可以通过get,set方法从缓存中获得和存储数据了。
分享到:
评论

相关推荐

    tomcat与memcached集群jar

    标题中的“tomcat与memcached集群jar”指的是在Apache Tomcat服务器上集成Memcached缓存技术所需的Java档案(JAR)文件。Tomcat是流行的开源Java应用服务器,用于部署和运行Java Servlet和JavaServer Pages(JSP)。...

    tomcat6 Memcached集群

    【标题】:“Tomcat6与Memcached集群整合实现Session共享” 在Web应用开发中,Session共享是一个关键问题,尤其是在分布式环境中。Tomcat6是Apache软件基金会的Java Servlet容器,广泛用于部署Java Web应用程序。而...

    tomcat7 memcached集群

    标题中的“tomcat7 memcached集群”指的是在Tomcat 7这个流行的Java应用服务器中,利用memcached构建的分布式缓存系统,以实现session共享。Session共享是Web应用程序中的一个关键概念,它允许用户在不同服务器之间...

    memcached开发完整demo

    **memcached 开发完整demo详解** `memcached` 是一个高性能、分布式的内存对象缓存系统,用于在动态系统中减少数据库负载,提升应用性能。它通过将数据存储在内存中,以键值对的形式提供高速的数据访问。在这个...

    memcached原理和使用详解

    资源名称:memcached原理和使用详解内容简介: Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库...

    Memcached内存分析、调优、集群

    Memcached是一款高性能的分布式内存缓存服务器,它最初由LiveJournal的运营人员开发,现已成为开源社区中不可或缺的一部分。其设计简洁,协议简单,基于libevent时间处理机制,能够利用epoll/kqueue等技术进行高效的...

    Memcached内存分析、调优、集群.pptx

    Memcached由LiveJournal运营人员开发,目前用户包括LiveJournal、Facebook、mixi、Digg、Wikipedia、Vox等。Facebook使用了200台 Memcached 服务器,每台服务器具有16GB 四核 AMD64处理器,缓存数据达到3TB。 ...

    Memcached内存分析、调优、集群.ppt

    【Memcached集群】 为了提高可用性和扩展性,Memcached可以构建为分布式集群。它使用一致性哈希算法来分散数据,使得数据在节点间均匀分布,增加或减少节点时,只影响一小部分键的映射位置。一致性哈希降低了重新...

    [Apache.MySQL.memcached.Perl开发高速开源网站

    此外,memcached还支持多台服务器之间的数据同步,能够在集群环境中提供一致性的缓存服务。 ### Perl Perl是一种通用的脚本语言,因其灵活性和强大的文本处理能力而在Web开发中占有重要地位。Perl支持CGI编程,...

    Memcached_Session_Manager jar

    要使用这个组件,开发人员需要将其添加到Tomcat的类路径中,并进行适当的配置,例如设置Memcached服务器的地址和端口,以及选择使用的序列化策略(javolution或kryo)。 总结起来,Memcached_Session_Manager jar是...

    memcached-2.0.1.tgz

    在分布式环境中,memcached集群可以处理大量并发请求,分发数据存储,避免单一节点成为瓶颈,确保服务的高可用性和容错性。 **标签:“php集群”** “php集群”标签进一步明确了memcached在这个场景下的用途,即与...

    memcached-1.5.4

    - 对于扩展性,`memcached`支持分布式集群模式,通过一致性哈希策略将数据分散到多个节点,实现高可用和水平扩展。 8. **与其他技术的集成** - `memcached`常与Web开发框架(如PHP、Python、Ruby等)结合使用,...

    java使用memcached demo

    随着数据量的增加,可以考虑集群部署,通过一致性哈希算法实现Memcached的水平扩展。 通过以上步骤,你可以在Java项目中成功集成并使用Memcached,实现高效的数据缓存。这不仅有助于提升应用性能,还能降低数据库的...

    memcached-win64-1.4.4-14

    6. **可扩展性**:通过增加更多的服务器节点,可以轻松扩展Memcached集群,应对更大的数据量和更高的并发。 **安装与配置** 在Windows环境下,用户可以下载"memcached-win64-1.4.4-14"压缩包,解压后运行Memcached...

    memcached java客户端驱动包

    在实际开发中,使用Java Memcached驱动包可以有效提升网站性能。例如,可以将频繁访问但计算成本高的数据存储在Memcached中,减少对数据库的依赖。或者,通过设置缓存过期时间,实现动态数据的缓存,提高响应速度。 ...

    memcached+tomcat的session共享

    在IT行业中,尤其是在分布式系统和Web应用开发领域,session共享是一个关键问题,特别是在集群环境中。当使用多个服务器来处理用户请求时,确保用户的session数据在所有服务器之间保持一致至关重要。"memcached+...

    memcached-1.4.22.tar.gz,magent6,memadmin

    memadmin可能是另一个memcached的管理工具,通常这类工具提供图形化界面,方便用户更直观地管理和监控memcached集群。memadmin-master.zip可能是这个工具的源码包,可能需要解压后编译安装,然后通过Web界面进行操作...

    几种.net调用memcached的开源类库

    2. **自动发现服务器**:如果Memcached集群中的服务器动态增加或减少,Enyim.Caching可以自动感知并调整连接。 3. **自定义序列化**:通过实现`IMemcachedClientSerialization`接口,你可以自定义数据的序列化和反...

    PHP分布式缓存memcached开发包

    作为PHP开发人员,我们一般能想到的方法有页面静态化处理、防盗链、CDN内容分发加速访问、mysql数据库优化建立索引、架设apache服务器集群()、还有就是现在流行的各种分布式缓存技术:如memcached/redis;...

    memcached(十一)memcached-session-manager

    6. **故障转移和高可用性**:介绍session数据的备份和恢复策略,以及如何在memcached集群中实现session的无缝迁移,以确保服务的连续性。 7. **源码分析**:如果标签中的“源码”是指这部分,那么教程可能包含对`...

Global site tag (gtag.js) - Google Analytics