您的位置:首页 > 数据库 > Memcache

memcached Java调用,注意点和基础知识

2016-05-10 11:22 537 查看
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`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: