[置顶] memcached Java调用,注意点和基础知识


  • 1. Memcached Client简要介绍 
     Memcached Client目前有3种: 
     Memcached Client for Java
     SpyMemcached
  •  XMemcached
    前两种的下载地址http://pan.baidu.com/s/1dEMWfuD

    这三种Client一般的认知是: 
    Memcached Client for Java 比 SpyMemcached更稳定、更早、更广泛;
    SpyMemcached 比 Memcached Client for Java更高效;
    XMemcached 比 SpyMemcache并发效果更好。
2.Java调用memcached用例
 2.1   Memcached Client for Java用例
import com.whalin.MemCached.MemCachedClient;
import com.whalin.MemCached.SockIOPool;
public class TestMemcached {
	public static void main(String[] args) {
		/*初始化SockIOPool,管理memcached的连接池*/
		String[] servers = { "120.143.23.240:12000"};//注意这里的memcached可以是多个
		SockIOPool pool = SockIOPool.getInstance();
		pool.setServers(servers);
		pool.setFailover(true);
		pool.setInitConn(10);//初始链接数
		pool.setMinConn(5);//最小链接数
		pool.setMaxConn(250);//最大链接数
		pool.setMaintSleep(30);
		pool.setNagle(false);
		pool.setSocketTO(3000);//超时时间
		pool.setAliveCheck(true);
		pool.initialize();
		/*建立MemcachedClient实例*/
		MemCachedClient memCachedClient = new MemCachedClient();
		for (int i = 0; i < 5; i++) {
			/*将对象加入到memcached缓存*/
			boolean success = memCachedClient.set("" + i, "Hello!");
			boolean yes = memCachedClient.set("yuanyirui", "ni shi yi ge da cai bi!");
			/*从memcached缓存中按key值取对象*/
			String result = (String) memCachedClient.get("" + i);
			System.out.println(String.format("set( %d ): %s", i, success));
			System.out.println(String.format("get( %d ): %s", i, result));
		}
	}
}
每个缓存都是一个server;
 2.2 SpyMemcached 用例
import java.net.InetSocketAddress;
import java.util.concurrent.Future;

import net.spy.memcached.MemcachedClient;

public class MClientSet {
	
	public static void main(String[] args){
		try{
			/*建立MemcachedClient 实例,并指定memcached服务的IP地址和端口号*/
			MemcachedClient mc = new MemcachedClient(new InetSocketAddress("120.143.23.240", 12000));
			Future<Boolean> b = null;
			/*将key值,过期时间(秒)和要缓存的对象set到memcached中*/
			b = mc.set("yuanyirui", 900, "ni shi yi ge da cai niao11");
//			Object c = mc.get("yuanyirui");
//		    System.out.println(c.toString());
			if(b.get().booleanValue()==true){
				mc.shutdown();//
			}
		}
		catch(Exception ex){
			ex.printStackTrace();
		}
	}
}
3.补充知识:五种基本 memcached 命令
add:仅当缓存中不存在键时,add 命令才会向缓存中添加一个键值对。如果缓存中已经存在键,则之前的值将仍然保持相同,并且您将获得响应;
replace:仅当键已经存在时,replace 命令才会替换缓存中的键。如果缓存中不存在键,将从 memcached 服务器接受到一条 NOT_STORED 响应;
set:有没有的数据都添加;
get:获取--没啥说的了;
delete:用于删除 memcached 中的任何现有值。您将使用一个键调用delete,如果该键存在于缓存中,则删除该值。如果不存在,则返回一条NOT_FOUND 消息;
小结:上面的中文解释就很清晰了。使用add可以避免恶意攻击。
问题:这就是秒杀的设计方式么 :

4.使用注意点: 
 Memcached的Key,要杜绝使用空格,且长度控制在250个字符。
 Memcached的Value,要控制体积,必须小于1MB,必要时进行使用压缩。
 失效时间,0为永久有效,最大值不得超过30天(2592000s),否则重新计算可能缓存只有1秒
 Memcached仅支持LRU算法,完全适用你的需要。
 尽量不要将List这种重体积对象扔到Memcached中,传输、存储都会产生瓶颈。
 使用一致性哈希算法实现,提高多个Memcacehd Server利用率。

5.memcached基础知识:
5.1 默认端口: 11211
telnet localhost 11211
5.2 启动命令:

memcached -d -p 12000 -u nobody -c 1024 -m64

-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助

5.3 查看:

ps -ef|grep memcached

5.4 关掉memcached
  kill -9 `cat /var/run/memcached.pid`


你可能感兴趣的:(java调用,Memcached基础知识)