目录
什么是Memcached?
java如何链接memcached客户端?
1.java memcached client
1.1导入memcached的jar相关的jar包
1.2编写连接memcached客户端程序
1.3MemCachedClient的api
2.Xmemcached
2.1导入xmemcached和slf4j的jar包
2.2编写连接程序
3.SpyMemcached
3.1导入SpyMemcached的jar包
3.2编写连接程序
总结:
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
1.Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。
2.Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
下载地址
pom文件的内容
4.0.0
com.hello
memcached
2.6.6
war
com.danga
java-memcached
2.6.6
org.slf4j
slf4j-simple
1.6.1
org.slf4j
slf4j-api
1.6.1
commons-pool
commons-pool
1.5.6
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
public class Test {
public static void main(String[] args) {
MemCachedClient cachedClient = new MemCachedClient();
// 设置连接池
SockIOPool sockIOPool = SockIOPool.getInstance();
// 服务器地址
String servers[] = new String[] { "127.0.0.1:11211" };
sockIOPool.setServers(servers);
// 最大连接数
sockIOPool.setMaxConn(50);
// 最小连接数
sockIOPool.setMinConn(10);
// 初始化连接数
sockIOPool.setInitConn(20);
// 自查线程周期进行工作,其每次休眠时间
sockIOPool.setMaintSleep(3000);
// Socket阻塞建立连接的等待时间
sockIOPool.setSocketConnectTO(3000);
// Socket阻塞读取数据的超时时间
sockIOPool.setSocketTO(3000);
// 如果是true在写数据时不缓冲,立即发送出去
sockIOPool.setNagle(false);
sockIOPool.initialize();
if (cachedClient != null) {// 为null,则表示连接不上
boolean flag = cachedClient.set("hello", "world");
System.out.println(flag);// 为true则插入成功
//查找key为hello的值
System.out.println(cachedClient.get("hello"));
}
}
}
// 插入(如果key存在,则替换,不存在,则新增)
cachedClient.set("hello", "world", new Date(3000));
// 新增(key存在则返回false)
cachedClient.set("nihao", 100);
//替换
cachedClient.replace("nihao", 1000);
// 查询
Object object = cachedClient.get("hello");
//查一组数据
Map objects = cachedClient.getMulti(new String[] {"nihao","hello"});
// 初始化一个计数器
cachedClient.storeCounter("count", 10L);
// 计数器增量操作
cachedClient.addOrDecr("count");
// 计数器减量操作
cachedClient.addOrIncr("count");
api与java memcached client的差不多
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 Test2 {
public static void main(String[] args)
throws IOException, TimeoutException, InterruptedException, MemcachedException {
MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("127.0.0.1:11211"));
MemcachedClient client = builder.build();
Object object = client.get("hello");
System.out.println(object);
}
}
import java.io.IOException;
import java.net.InetSocketAddress;
import net.spy.memcached.MemcachedClient;
public class Test3 {
public static void main(String[] args) throws IOException {
MemcachedClient memcacheCient = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
}
}
Java Memcache Client for Java应用最广泛,也是当前最稳定的客户端, 在线上系统大量的使用此客户端。特点: 较早推出的memcached JAVA客户端API,应用广泛,运行比较稳定,使用阻塞IO,不支持CAS操作。
SpyMemecache基于Java NIO的客户端,存取速度会高于前者,但是稳定性不好,测试中常报timeOut等相关异常,支持CAS操作。
XMemcached同样是基于Java NIO的客户端,Java NIO相比于传统阻塞IO模型来说,有效率高(特别在高并发下)和资源耗费相对较少的优点。