`
mushme
  • 浏览: 778837 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

java连接memcached示例代码

 
阅读更多
1.下载memcached的windows版本,地址在http://code.jellycan.com/memcached/
2.解压到任意目录,然后用管理员身份cd到你的解压目录
3.memcached.exe -d install
4.memcached.exe -d start
memcached安装完成。


https://github.com/gwhalin/Memcached-Java-Client/downloads
java_memcached-release_2.5.0.zip为java的连接客户端
1.解压,将里面的jar包拷贝到项目的lib目录下

使用以下代码调用

package info.frady;


import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;

/**
 * Oct 15, 2011
 */
public class MemCachedTest {
	private static MemCachedClient mcc = new MemCachedClient();
	 
    static {
        String[] servers = {"127.0.0.1:11211"};
        //创建一个连接池
        SockIOPool pool = SockIOPool.getInstance();
        //设置缓存服务器
        pool.setServers(servers);
        //设置初始化连接数,最小连接数,最大连接数以及最大处理时间
        pool.setInitConn(50);
        pool.setMinConn(50);
        pool.setMaxConn(500);
        pool.setMaxIdle(1000 * 60 * 60);
        //设置主线程睡眠时间,每3秒苏醒一次,维持连接池大小
//maintSleep 千万不要设置成30,访问量一大就出问题,单位是毫秒,推荐30000毫秒。
        pool.setMaintSleep(3000);
        //关闭套接字缓存
        pool.setNagle(false);
        //连接建立后的超时时间
        pool.setSocketTO(3000);
        //连接建立时的超时时间
        pool.setSocketConnectTO(0);
        //初始化连接池
        pool.initialize();
    }
 
    protected MemCachedTest(){
 
    }
 
    public static MemCachedClient getInstance(){
        return mcc;
    }
 
    public static void main(String[] args) {
 
        MemCachedClient cache = MemCachedTest.getInstance();
        
        
        cache.add("frady", "this is a test");
        System.out.println(cache.get("frady"));
        
    }
}


以下是对象的封装
package info.frady;

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;

/**
 * Oct 15, 2011
 */
public class MemTest {
	// 创建一个 memcached 客户端对象

	protected static MemCachedClient mcc = new MemCachedClient();

	// 创建 memcached连接池

	static

	{ // 指定memcached服务地址

	String[] servers =

	{ "127.0.0.1:11211","127.0.0.1:11211", "127.0.0.1:11211" };

	// 指定memcached服务器负载量

	Integer[] weights ={ 3, 3, 2 };

	// 从连接池获取一个连接实例

	SockIOPool pool = SockIOPool.getInstance();

	// 设置服务器和服务器负载量

	pool.setServers( servers );

	pool.setWeights( weights );

	// 设置一些基本的参数

	//设置初始连接数5 最小连接数 5 最大连接数 250

	//设置一个连接最大空闲时间6小时

	pool.setInitConn( 5 );

	pool.setMinConn( 5 );

	pool.setMaxConn( 250 );

	pool.setMaxIdle( 1000 * 60 * 60 * 6 );

	// 设置主线程睡眠时间

	// 每隔30秒醒来 然后

	// 开始维护 连接数大小

	pool.setMaintSleep( 30 );

	// 设置tcp 相关的树形

	// 关闭nagle算法

	// 设置 读取 超时3秒钟 set the read timeout to 3 secs

	// 不设置连接超时

	pool.setNagle( false );

	pool.setSocketTO( 3000 );

	pool.setSocketConnectTO( 0 );

	// 开始初始化 连接池

	pool.initialize();

	// 设置压缩模式

	//如果超过64k压缩数据

	mcc.setCompressEnable( true );

	mcc.setCompressThreshold( 64 * 1024 );

	}

	public static void main(String args[]) {
		User u1 = new User();
        u1.setUserName("frady");
        u1.setEmail("weimengiq@126.com");
        mcc.add("fradyt", u1);
 
        User u2 = (User) mcc.get("fradyt");
        System.out.println("email=" + u2.getEmail());
        u2.setEmail("weimengiq@gmail.com");
        mcc.replace("fradyt", u2);
 
        u2 = (User) mcc.get("fradyt");
        System.out.println("email=" + u2.getEmail());
       

	}

	}



此处要注意User得实现序列化
package info.frady;

import java.io.Serializable;

/**
 * Oct 15, 2011
 */
public class User implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1003272426055966138L;
	private String userName;
	private String email;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
}



查看cache的状态
Map <String, Map<String, String>> stats = cache.stats();
        for (Map.Entry<String, Map<String, String>> m : stats.entrySet()) {
        	System.out.println(m.getKey());
        	Map<String, String> values=m.getValue();
        	for (Map.Entry<String, String> v : values.entrySet()) {
            	System.out.print(v.getKey()+":");
            	System.out.println(v.getValue());
            }
        }


清空所有的对象
MemCachedClient mc = new MemCachedClient();
mc.flushAll();


据说2.5有连接数量过多导致oom的bug,附件提供了2.6.1版本的包。
官方地址:https://github.com/gwhalin/Memcached-Java-Client/downloads
分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目源代码

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,...

    JAVA上百实例源码以及开源项目

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,...

    java开源包4

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包10

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包8

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包101

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包11

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包6

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包9

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包5

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包1

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包3

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    Java资源包01

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包2

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    java开源包7

    J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...

    ZendFramework中文文档

    4.4.3. Zend_Cache_Backend_Memcached 4.4.4. Zend_Cache_Backend_Apc 4.4.5. Zend_Cache_Backend_ZendPlatform 5. Zend_Config 5.1. 简介 5.2. 操作理论 5.3. Zend_Config_Ini 5.4. Zend_Config_Xml 6. ...

Global site tag (gtag.js) - Google Analytics