您的位置:首页 > 数据库 > Memcache

xmemcached学习笔记

2015-10-15 14:51 676 查看
源码:http://www.boyunjian.com/javasrc/com.googlecode.xmemcached

/xmemcached/1.4.3/_/net/rubyeye/

xmemcached/impl/MemcachedConnector.java

分类: Java2012-04-18
18:37 4110人阅读 评论(0) 收藏 举报

memcachedthreadjavastringserverimport

XMemcached 学习整理

1、首先要把server 启动:对应到相应的目录下memcached.exe –start

2、依赖slf4j.jar包,下载slf4j 把D:\library\slf4j-1.5.5\slf4j-simple-1.5.5.jar

和D:\library\slf4j-1.5.5\slf4j-simple-1.5.5.jar放在classpath路径下

3、Memcache第一次会把数据放在内存当中,每次执行的时候如果数据没有变就不更新,直接从内存当中取。

4、如果server停掉,存在内存中的数据会消失

5、替换键对应的数值

Replace(“key”,”value”);

Java代码







MemcachedClientBuilder builder = newXMemcachedClientBuilder(AddrUtil.getAddresses("10.180.44.224:11211
zhouxq:11211"),new int[]{1,3});

[java] view
plaincopy

MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("10.180.44.224:11211 zhouxq:11211"),new int[]{1,3});

MemcachedClientBuilder 5个构造方法

构造方法

XMemcachedClientBuilder(List/Map address,int[] weight)

Address 可以是:

Java代码







java.util.Map<java.net.InetSocketAddress,java.net.InetSocketAddress> addressMap

java.util.List<java.net.InetSocketAddress> addressList

[java] view
plaincopy

java.util.Map<java.net.InetSocketAddress,java.net.InetSocketAddress> addressMap

java.util.List<java.net.InetSocketAddress> addressList

weight 与servers对应的节点的权重

weight 可以有也可无

weight 值大则权重大,否则小

XMemcached允许通过设置节点的权重来调节memcached的负载,设置的权重越高,该memcached节点存储的数据将越多,所承受的负载越大。

xmemcached的权重是通过复制连接的多个引用来实现的,比如权重为3,那么就复制3个同一个连接的引用放在集合中让MemcachedSessionLocator查找。

改变节点权重,可以通过setServerWeight方法:

Java代码







public void setServerWeight(String
server, int weight);

[java] view
plaincopy

public void setServerWeight(String server, int weight);

传入一个int数组,里面的元素就是节点对应的权重值,比如这里设置"10.180.44.224:1121"节点的权重为1,而"zhouxq:11211"的权重为3。

类似的XMemcachedClient()和XMemcachedClientBuilder相同

设置连接池大小

Java代码







builder.setConnectionPoolSize(5);

[java] view
plaincopy

builder.setConnectionPoolSize(5);

连接池通常不建议设置太大,我推荐在0-30之间为好,太大则浪费系统资源,太小无法达到分担负载的目的。

设置失败模式 如果服务出现down的情况,会报出异常,直到服务正常

Java代码







builder.setFailureMode(true);

[java] view
plaincopy

builder.setFailureMode(true);

使用二进制文件

Java代码







builder.setCommandFactory(new BinaryCommandFactory());

[java] view
plaincopy

builder.setCommandFactory(new BinaryCommandFactory());

7、

存储数据是通过set方法,它有三个参数,第一个是存储的key名称,第二个是expire时间(单位秒),超过这个时间,memcached将这个数据替换出去,0表示永久存储(默认是一个月),第三个参数就是实际存储的数据,可以是任意的java可序列化类型。

Java代码







Thread t = new Thread();

t.start();

t.sleep(3000);

//从memcached获取key对应的value,操作超时3秒

[java] view
plaincopy

Thread t = new Thread();

t.start();

t.sleep(3000);

//从memcached获取key对应的value,操作超时3秒

someObject=memcachedClient.get("key",3000);后面的对应的是毫秒

超时后得到的key对应的值为null

8、与Spring框架集成

通过XMemcachedClientFactoryBean类,即可与spring框架集成

测试代码

Java代码







package com.test.xmemcache;

import java.io.IOException;

import java.util.concurrent.TimeoutException;

import net.rubyeye.xmemcached.MemcachedClient;

import net.rubyeye.xmemcached.MemcachedClientBuilder;

import net.rubyeye.xmemcached.XMemcachedClientBuilder;

import net.rubyeye.xmemcached.exception.MemcachedException;

import net.rubyeye.xmemcached.utils.AddrUtil;

public class XmemcacheTest
{

/**

* @param args

*/

public static void main(String[]
args) {

// TODO Auto-generated method stub

MemcachedClientBuilder builder = newXMemcachedClientBuilder(AddrUtil.getAddresses("10.180.44.224:11211
zhouxq:11211"),new int[]{1,3});

try {

MemcachedClient memcachedClient = builder.build();

memcachedClient.set("hello", 1, "Hello,xmemcached");

String Value=memcachedClient.get("hello",3000); //

System.out.println("hello=" +
Value);

// memcachedClient.flushAll();

memcachedClient.replace("hello",1, "zhouxq");

System.out.println(memcachedClient.get("hello"));

// memcachedClient.deleteWithNoReply("hello");
//删除

System.out.println(memcachedClient.get("hello"));

// memcachedClient.delete("hello"); //删除

// Value = memcachedClient.get("hello");

// System.out.println("hello=" + Value);

memcachedClient.set("key",2,"someObject");

//从memcached获取key对应的value

Object someObject=memcachedClient.get("key");

Thread t = new Thread();

t.start();

t.sleep(1000);

//从memcached获取key对应的value,操作超时3秒

someObject=memcachedClient.get("key",1000);

System.out.println(someObject);

memcachedClient.shutdown();

} catch (MemcachedException
ex) {

System.err.println("MemcachedClient operation fail");

ex.printStackTrace();

} catch (TimeoutException
xe) {

System.err.println("MemcachedClient operation timeout");

xe.printStackTrace();

} catch (InterruptedException
e) {

// ignore

} catch (IOException
e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: