memcached java Client学习(转)

本文介绍MemCached作为web项目缓存工具的应用实践,包括配置示例和服务端负载均衡策略,展示了如何通过Java客户端进行对象存储、计数操作及批量获取等。
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 对象的大小。从而节省网络带宽和内存空间。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值