java使用memcached

目录

什么是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?

Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。

1.Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。

2.Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

 

java如何链接memcached客户端?

1.java memcached client

1.1导入memcached的jar相关的jar包

  • 下载地址 

  • 由于目前java memcached client没有官方的maven repository可供使用,因此使用时需要手动将其安装到本地repository。将下载好的memcached进行解压,然后编写一个pom文件,引用memcached所需要的其他的jar包,然后将memcached的jar安装到自己maven仓库。安装语句:mvn install:install-file -Dfile=F:\memcached\java_memcached-release_2.6.6.jar -DpomFile=F:\memcached\pom.xml

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  
    
  

1.2编写连接memcached客户端程序


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"));
		}
	}
}

1.3MemCachedClient的api

            // 插入(如果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");

2.Xmemcached

2.1导入xmemcached和slf4j的jar包

2.2编写链接程序

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);
	}
}

3.SpyMemcached

3.1导入xmemcached和slf4j的jar包

3.2编写链接程序

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));
	
	}
}

总结:

memcached的特点:

  1. 全内存运转
  2. 哈希方式存储
  3. 简单文本协议进行数据通信
  4. 只操作字符型数据
  5. 其它类型数据由应用解释,序列化以及反序列化
  6. 集群也由应用进行控制,采用一致性散列(哈希)算法

Memcached的缺点

  • 纯内存操作,关机后数据全部丢失
  • 保存字节数据,数据类型贫乏
  • LRU算法导致数据不可控的丢失
  • 一致性处理简单
  • 应用端太厚,服务器端太薄
  • 应用场景有限,难以被看成是完整的数据库产品

API的实现总结

Java Memcache Client for Java应用最广泛,也是当前最稳定的客户端, 在线上系统大量的使用此客户端。特点: 较早推出的memcached JAVA客户端API,应用广泛,运行比较稳定,使用阻塞IO,不支持CAS操作。

SpyMemecache基于Java NIO的客户端,存取速度会高于前者,但是稳定性不好,测试中常报timeOut等相关异常,支持CAS操作。

XMemcached同样是基于Java NIO的客户端,Java NIO相比于传统阻塞IO模型来说,有效率高(特别在高并发下)和资源耗费相对较少的优点。

 

你可能感兴趣的:(Memcached)