- 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`