memcached java Client学习(转)

MemCached是很好用的web项目缓存工具,本人在项目中实际使用,比较好用,下面是基础说明,很简单的,所要使用的 jar文件可以到官方网站上下载



memcached client1.6使用文档

一个例子

官方网站 http://www.whalin.com/memcached/

==============

假设我们有3台memcached 服务器,server1 和server2 有3GB 的内存空间,server3 有2GB 的内存空间.下面程序说明怎么来创建客户端.

import com.danga.MemCached.*;

public class MyClass {

// 创建一个 memcached 客户端对象

protected static MemCachedClient mcc = new MemCachedClient();

// 创建 memcached连接池

static

{ // 指定memcached服务地址

String[] servers =

{ "server1.mydomain.com:1121","server2.mydomain.com:1121", "server3.mydomain.com:1121" };

// 指定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 examples() {

mcc.set( "foo", "This is a test String" );

String bar = mcc.get( "foo" );

}

}

MemCachedClient 类 常用的方法说明

创建 client对象 设置参数:

MemCachedClient mc = new MemCachedClient();

//压缩模式

mc.setCompressEnable(true);

// 如果 cache数据 大于4 KB 就启用压缩

mc.setCompressThreshold(4096);

// 基本类型tostring方法

// 通常不需要设置

mc.setPrimitiveAsString(true);

存储一个对象:

MemCachedClient mc = new MemCachedClient();

String key = "cacheKey1";

Object value = SomeClass.getObject();

mc.set(key, value);

用客户端hashcode 存储一个对象:


MemCachedClient mc = new MemCachedClient();

String key = "cacheKey1";

Object value = SomeClass.getObject();

Integer hash = new Integer(45);

mc.set(key, value, hash);

set方法:在cache中存储一个指定对象

add 和replace 方法功能差不多

add -- 如果不存在 这个key的对象,将会存储一个对象到cache中

replace --只有当存在指定key对象的时候 会覆盖已有对象

删除一个对象:

MemCachedClient mc = new MemCachedClient();

String key = "cacheKey1";

mc.delete(key);

结合hashcode 删除一个对象:

MemCachedClient mc = new MemCachedClient();

String key = "cacheKey1";

Integer hash = new Integer(45);

mc.delete(key, hashCode);

怎么cache计数,增 减计数:

MemCachedClient mc = new MemCachedClient();

String key = "counterKey";

mc.storeCounter(key, new Integer(100));

System.out.println("counter after adding 1: " mc.incr(key));

System.out.println("counter after adding 5: " mc.incr(key, 5));

System.out.println("counter after subtracting 4: " mc.decr(key, 4));

System.out.println("counter after subtracting 1: " mc.decr(key));

利用客户端的hashcode存储计数 增减 计数:

MemCachedClient mc = new MemCachedClient();

String key = "counterKey";

Integer hash = new Integer(45);

mc.storeCounter(key, new Integer(100), hash);

System.out.println("counter after adding 1: " mc.incr(key, 1, hash));

System.out.println("counter after adding 5: " mc.incr(key, 5, hash));

System.out.println("counter after subtracting 4: " mc.decr(key, 4, hash));

System.out.println("counter after subtracting 1: " mc.decr(key, 1, hash));

获取一个对象:

MemCachedClient mc = new MemCachedClient();

String key = "key";

Object value = mc.get(key);

用客户端hashcode获取一个对象:

MemCachedClient mc = new MemCachedClient();

String key = "key";

Integer hash = new Integer(45);

Object value = mc.get(key, hash);

从cache 中获取多个对象

MemCachedClient mc = new MemCachedClient();

String[] keys ={ "key", "key1", "key2" };Mapvalues = mc.getMulti(keys);

用客户端hashcode() 从cache中获取多个对象

MemCachedClient mc = new MemCachedClient();

String[] keys = { "key", "key1", "key2" };

Integer[] hashes =

{ new Integer(45), new Integer(32), new Integer(44) };

Map<Object> values = mc.getMulti(keys, hashes);


清空所有的对象

MemCachedClient mc = new MemCachedClient();

mc.flushAll();

得到服务器memcached的状态信息

MemCachedClient mc = new MemCachedClient();

Map stats = mc.stats();

注意点

1:Failover/Failback

当一个memcached服务器失效的时候客户端默认会failover另一个服务去.

如果失效的服务器 恢复运行,客户端会返回到原来连接的服务器.

如果你不想用这个功能 设置下面的参数

pool.setFailover( false );

pool.setFailback( false );

2:序列化

Boolean

Byte

String

Character

StringBuffer

StringBuilder

Short

Long

Double

Float

Date

java默认的类型没有实现序列化 可以设置

mcc.setPrimitiveAsString( true )替代.
Meetup.com实践过程中得出的一个经验 ,项目中model 对象implement

Externalizable 实现序列化,可以节省cache 对象的大小。从而节省网络带宽和内存空间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Java memcached client的过程中,建立与memcached服务端的socket连接是必不可少的一步。下面简单介绍一下如何建立socket连接。 1. 创建Socket对象 在Java中,我们可以通过创建Socket对象来建立与memcached服务端的连接。代码如下: ```java Socket socket = new Socket("localhost", 11211); ``` 其中,`localhost`表示memcached服务端所在的主机名或IP地址,`11211`表示memcached服务端监听的端口号。 2. 获取输入输出流 连接建立之后,我们需要获取套接字的输入输出流以便进行数据的读写操作。代码如下: ```java InputStream inputStream = socket.getInputStream(); OutputStream outputStream = socket.getOutputStream(); ``` 3. 发送请求 建立连接并获取输入输出流之后,我们就可以向memcached服务端发送请求了。在memcached中,请求的格式通常是一个命令字(比如`get`、`set`等)以及相应的参数。代码如下: ```java String command = "get mykey\r\n"; byte[] request = command.getBytes(); outputStream.write(request); ``` 其中,`\r\n`表示回车换行,用来告诉memcached服务端一条命令的结束。 4. 接收响应 发送请求之后,我们需要等待memcached服务端的响应。在Java中,我们可以通过输入流来读取服务端返回的数据。代码如下: ```java byte[] buffer = new byte[1024]; int len = inputStream.read(buffer); if (len > 0) { String response = new String(buffer, 0, len); System.out.println(response); } ``` 其中,`1024`表示读取数据时使用的缓冲区大小,`len`表示实际读取的数据长度,`response`表示服务端返回的字符串。 5. 关闭连接 最后,我们需要在使用完套接字之后关闭它以释放资源。代码如下: ```java socket.close(); ``` 完整示例代码如下: ```java import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class MemcachedClientDemo { public static void main(String[] args) throws Exception { Socket socket = new Socket("localhost", 11211); InputStream inputStream = socket.getInputStream(); OutputStream outputStream = socket.getOutputStream(); String command = "get mykey\r\n"; byte[] request = command.getBytes(); outputStream.write(request); byte[] buffer = new byte[1024]; int len = inputStream.read(buffer); if (len > 0) { String response = new String(buffer, 0, len); System.out.println(response); } socket.close(); } } ``` 以上就是如何在Java中建立与memcached服务端的socket连接的简单介绍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值