memcached 配置-使用-java结合
2015-04-01 08:19
411 查看
1.总览
安装memcached单节点/多节点
memcached中的简单命令
多个节点memcached
spymemcached---memcachedjavaclient的使用
一个简单的例子程序
2.简单安装memcached
一句话安装好memcached...
启动memcached的步骤.
通过telnet可以简单的测试一下memcached的服务
localhost:可以改成远程的ip地址
11211:默认的端口号
3.memcached中的简单命令
通过set方法可以来添加缓存值.
除了set方法之外还有很多方法.
储存命令(StorageCommands)
4.多个节点memcached
单机情况下使用多个端口号来模拟多个节点的memcached
开启了两个端口号来模拟这个实验.如果有条件肯定是多台服务器更好.
启动memcached时候后面参数的意义
5.spymemcached使用
这个是一个基于原生NIO模型的工具.能够实现异步的加载数据.
5.1基本API用法
Spymemcached的使用方法比较简单
(1)MemcachedClient构造函数需要提供Server列表。
(2)对于基本操作都有对应的API,例如
存储相关
检索相关
其他
6.简单的test
使用maven依赖包引入
小结:
spymemcached背后的nio模型可能要好好看透,主要是没有发现使用的场景,只能简单的当成跟同步的
缓存来用了.同时这个工具有spring的工具包,有空可以一起搞掉.
参考:<http://isuifengfei.iteye.com/blog/1677704>
这一篇确实写得非常好
安装memcached单节点/多节点
memcached中的简单命令
多个节点memcached
spymemcached---memcachedjavaclient的使用
一个简单的例子程序
2.简单安装memcached
一句话安装好memcached...
#yuminstallmemcached
启动memcached的步骤.
通过telnet可以简单的测试一下memcached的服务
localhost:可以改成远程的ip地址
11211:默认的端口号
#telnetlocalhost11211
3.memcached中的简单命令
通过set方法可以来添加缓存值.
set<key><flag><expires><byte>
Flag用于指定是否压缩数据,0不压缩,1压缩
Expires指定数据保存的时间,一种方法是秒数(不能超过30天),另
一种可以使用unix时间戳指定,0为有效期无限
Byte保存值的字节数
除了set方法之外还有很多方法.
储存命令(StorageCommands)
set | 添加或者覆盖一个Key,新的item放在LRU的顶端 |
add | 添加一个Key |
replace | 覆盖一个key |
append | 在一个已有的Key的Value后面追加数据 |
prepend | 在一个已有的Key的Value前面添加数据 |
cas | Check-and-Set或者叫Compare-and-Swap,当数据等于指定值的时候,再对Key对应的value进行修改, 主要用于解决竞争条件 |
单机情况下使用多个端口号来模拟多个节点的memcached
memcached-d-p11212-unobody-c1024-m64
memcached-d-p11213-unobody-c1024-m64
开启了两个端口号来模拟这个实验.如果有条件肯定是多台服务器更好.
启动memcached时候后面参数的意义
-m | 告诉memcached使用多大的RAM来进行存储,单位是MB。这个数字并不是严格意义上的最大值,memcached可能会在此之上增加一些内存使用 |
-d | 告诉mecached以守护进程的方式启动 如果通过initscript的方式启动memcached,可以忽略这个参数 第一次启动时可以忽略这个参数 |
-v | 告诉memcached运行时,打印标准输出STDOUT/STDERR 一个v只打印启动信息 多个v可以打印出来缓存命中的情况 在测试环境下,在前台打印输出信息是个不错的选择 |
-p | 指定启动实例的端口号,默认11211 实际的应用中,使用分布式Memcached的时候,应用每台PC部署一个实例,但是在学习测试环境下,可以在同一台PC上开启多个实例,只要端口号不冲突就可以 |
这个是一个基于原生NIO模型的工具.能够实现异步的加载数据.
5.1基本API用法
Spymemcached的使用方法比较简单
(1)MemcachedClient构造函数需要提供Server列表。
(2)对于基本操作都有对应的API,例如
存储相关
add | 添加一组KV对 OperationFuture<Boolean>add(Stringkey,intexp,Objecto) 第二个参数exp代表KV对的有效期 (1)以秒为单位的有效时间,最大是30天,如果超过了30天,会被认为是(2) (2)距离1970/01/01的以秒为单位的时间 搜索的存储操作都是异步请求 通过返回的Future对象,可以判断处理的结果 |
set | 添加或者覆盖一组KV对,其他同add |
replace | 覆盖一组KV对,其他同add |
touch | ASCII协议不支持 仅二进制协议支持 |
incr decr | 在对应的Key的value上增加/减少 注意,储存的value不能是Integer或者Long形式的数字 必须是String形式的数字字符串"123" |
delete | 删除 |
get | 同步检索K,返回value |
asyncGet | 异步检索K |
Gets | 检索V的同时返回cas值 结果包装在CASValue中 |
cas | 这个方法其实就是cas模式的replace 会分为3种不同的情况 OK-操作成功 NOT_FOUND-操作的Key不存在,这时候不会进行额外的add操作 EXISTS-Key存在,但是提交的cas已经发生了改变,不发生变化 |
asyncCAS | 异步版本cas |
getBulk | 批量读取 返回的是Map<String,Object> |
getSats | 获得参数 |
getUnavailableServers | 获取当前可用Server |
getVersions | 获取memcached版本 |
flush | 清空缓存 |
使用maven依赖包引入
<dependency>
<groupId>com.google.code.simple-spring-memcached</groupId>
<artifactId>spymemcached</artifactId>
<version>2.8.4</version>
</dependency>
packagecom.heinz.memcached.memcached;
importjava.io.IOException;
importjava.io.Serializable;
importjava.net.InetSocketAddress;
importjava.util.concurrent.ExecutionException;
importnet.spy.memcached.MemcachedClient;
publicclassMemcachedTest{
publicstaticvoidmain(String[]args)throwsIOException{
//模拟三个服务器
MemcachedClientc=newMemcachedClient(
newInetSocketAddress("192.168.216.133",11211),
newInetSocketAddress("192.168.216.133",11212),
newInetSocketAddress("192.168.216.133",11213));
//放入100个key/value
for(inti=0;i<100;i++){
c.set("key"+i,10000,newInteger(i));
}
longstart=System.currentTimeMillis();
try{
//尝试使用异步的get方法获取
for(inti=0;i<100;i++){
System.out.println(c.asyncGet("key"+i).get());
}
System.out.println("---------------");
//使用CAS(CheckAndSet)保持一致性的修改方式
for(inti=0;i<100;i++){
c.asyncCAS("key"+i,c.asyncGets("key"+i).get().getCas(),i+i);
}
//异步的获取方式
for(inti=0;i<100;i++){
System.out.println(c.asyncGet("key"+i).get());
}
}catch(InterruptedExceptione){
e.printStackTrace();
}catch(ExecutionExceptione){
e.printStackTrace();
}
longend=System.currentTimeMillis();
System.out.println("用了时间:"+(end-start));
//这里尝试存放一个对象
Useru1=newUser();
u1.userName="heinz_ho";
u1.password="123";
c.set("user1",3600,u1);
System.out.println(c.get("user1"));
}
}
//必须将对象序列化才能保存
classUserimplementsSerializable{
//瞬时性直接打印null
publictransientStringuserName;
publicStringpassword;
publictransientintid=1;
publictransientintid2;
@Override
publicStringtoString(){
returnuserName+password+id+id2;
}
}
小结:
spymemcached背后的nio模型可能要好好看透,主要是没有发现使用的场景,只能简单的当成跟同步的
缓存来用了.同时这个工具有spring的工具包,有空可以一起搞掉.
参考:<
这一篇确实写得非常好
相关文章推荐
- Memcached学习笔记——windows上初步使用(与java结合)
- java、memcached的配置及使用
- java、memcached的配置及使用。
- Java程序使用memcached配置与示例
- java反射,类加载器以及配置文件的结合使用
- Redis(Windows安装方法与Java调用实例 & 配置文件参数说明 & Java使用Redis所用Jar包 & Redis与Memcached区别 & redis-cli.exe命令及示例)
- Java程序使用memcached配置与示例
- Java程序使用memcached配置与示例
- Java中配置文件和反射一起结合的使用
- java 使用memcached以及spring 配置memcached完整实例代码
- java、memcached的配置及使用。
- java、memcached的配置及使用。
- 【学习】java、memcached、windows的配置及使用
- Memcached学习笔记——windows上初步使用(与java结合)
- Java程序使用memcached配置与示例
- java 使用memcached以及spring 配置memcached
- Java中使用MySQL从安装、配置到实际程序测试详解
- 面向 Java 开发人员的 Ajax: 结合 Direct Web Remoting 使用 Ajax----数据序列化不可能比这更简单了!
- 在EasyDBO中使用Java注解配置映射的原理及使用
- 结合SPRING 2.0使用JAVA PERSISTENCE API