java xmemcached incr_XMemcached的基本使用
XMemcached是memcached的一个java客户端,基于java nio,支持memcached的所有协议。本文简要介绍XMemcached的基本使用。
一、添加依赖
com.googlecode.xmemcached
xmemcached
2.4.0
二、创建Java文件
UserModel.java
packagecom.czhappy.memcached_project.vo;importjava.io.Serializable;public class UserModel implementsSerializable{private intuuid;privateString userName;private intage;publicUserModel(){}public UserModel(int uuid, String userName, intage) {this.uuid =uuid;this.userName =userName;this.age =age;
}public intgetUuid() {returnuuid;
}public void setUuid(intuuid) {this.uuid =uuid;
}publicString getUserName() {returnuserName;
}public voidsetUserName(String userName) {this.userName =userName;
}public intgetAge() {returnage;
}public void setAge(intage) {this.age =age;
}
@OverridepublicString toString() {return "UserModel{" +
"uuid=" + uuid +
", userName='" + userName + '\'' +
", age=" + age +
'}';
}
}
ConnectonHelper.java
packagecom.czhappy.memcached_project.utils;importnet.rubyeye.xmemcached.MemcachedClient;importnet.rubyeye.xmemcached.MemcachedClientBuilder;importnet.rubyeye.xmemcached.XMemcachedClient;importnet.rubyeye.xmemcached.XMemcachedClientBuilder;importnet.rubyeye.xmemcached.utils.AddrUtil;importorg.junit.Test;importjava.io.IOException;importjava.net.InetSocketAddress;importjava.util.Map;public classConnectonHelper {public staticMemcachedClient getClient(){//连接配置
MemcachedClientBuilder memcachedClientBuilder =
new XMemcachedClientBuilder(AddrUtil.getAddresses("192.168.84.128:2222"));//创建与服务端之间的连接[ip地址,端口号,用户名和密码]//获取操作业务对象
MemcachedClient memcachedClient = null;try{
memcachedClient=memcachedClientBuilder.build();
}catch(IOException e) {
e.printStackTrace();
}returnmemcachedClient;
}public static void main(String[] args) throwsException {//连接配置//创建与服务端之间的连接[ip地址,端口号,用户名和密码]//获取操作业务对象
MemcachedClient memcachedClient =
new XMemcachedClient("192.168.84.128",2222);//操作业务
String str = "Hello World!";boolean isSuccess = memcachedClient.set("k1", 3600, str);
String value= memcachedClient.get("k1");
System.out.println("value="+value);//关闭与服务端连接
memcachedClient.shutdown();
}
}
执行Main方法,判断是否连接成功:
三、基本使用
定义MemcachedClient
static MemcachedClient client = ConnectonHelper.getClient();
定义查询【get/gets】方法
public static void showQuery(String key)throwsException{
UserModel um=client.get(key);
System.out.println("get方法获取的值="+um);
}
定义新增【set,add】方法
public static void showAdd(UserModel um) throwsException {
client.set("set-user:"+um.getUuid(),3600,um);
client.add("add-user:"+um.getUuid(),3600,um);
}
测试:
UserModel um = new UserModel(1, "李四", 55);
showAdd(um);
showQuery("set-user:1");
showQuery("add-user:1");
查询测试结果:
我们通过命令行添加k1,用来测试update方法:
定义修改【replace,append,prepend】方法
public static void showUpdate(UserModel um) throwsException{
client.replace("set-user:"+um.getUuid(),3600,um);//Hi! asd chenz
client.prepend("k1","Hi! ");
client.append("k1"," chenz");
}
测试:
UserModel um = new UserModel(1, "王五", 60);
showUpdate(um);
查询测试结果:
showQuery("set-user:1");
定义删除【delete】方法
public static void showDelete(String key)throwsException{boolean isSuccess =client.delete(key);
System.out.println("delete结果="+isSuccess);
}
测试删除:
showDelete("k1");
定义检查更新【cas】方法
public static void showCAS(UserModel um)throwsException{
String key= "set-user:" +um.getUuid();//第一件事先获取版本号
GetsResponse userModelGetsResponse =showGets(key);long cas =userModelGetsResponse.getCas();// //演示cas版本是否生效//UserModel um1 = new UserModel(1,"happy admin",20);//showUpdate(um1);//进行更新操作
boolean isSuccess = client.cas(key, 3600, um, cas);
System.out.println("更新结果="+isSuccess);
}
测试:
UserModel um = new UserModel(1, "科比", 35);
showCAS(um);
查询结果:
showQuery("set-user:1");
问题:在获取版本号之后及cas数据之前,这一段存在时间差,可能会因为版本号的问题导致操作失败,因此,XMemcached特地封装了xmcas
public static void showXMCAS() throwsException {//操作XMemcached提供的CAS操作
client.cas("k1", new CASOperation() {//重试次数
public intgetMaxTries() {returnInteger.MAX_VALUE;
}//修改内容
public String getNewValue(longcas, String currentValue) {return "Hi ! "+currentValue + "!!!!!";
}
});
}
定义数值操作【incr/decr】方法
public static void showNumChange()throwsException{
MemcachedClient memcachedClient=ConnectonHelper.getClient();long result = memcachedClient.incr("k5",5,10);
System.out.println("result1 = "+result);
result= memcachedClient.incr("k5",40,10);
System.out.println("result2 = "+result);
result= memcachedClient.decr("k5",25,10);
System.out.println("result3 = "+result);
result= memcachedClient.decr("k5",30,10);
System.out.println("result4 = "+result);
}
测试结果:
针对上述结果,给出以下解释说明:
/*long result = memcachedClient.incr("k5",5,10);
result1 = 10 -> API【如果key不存在,则第三个参数为初始值】
result = memcachedClient.incr("k5",40,10);
result2 = 50 -> 如果key存在,则进行递增或递减操作
result = memcachedClient.decr("k5",25,10);
result3 = 25 -> 如果key存在,则进行递增或递减操作
result = memcachedClient.decr("k5",30,10);
result4 = 0 -> decr是不能减出负数*/
获取所有的key列表
public static void showKeyIterator() throwsException{
KeyIterator keyIterator= client.getKeyIterator(AddrUtil.getOneAddress("192.168.84.128:2222"));while(keyIterator.hasNext()){
System.out.println("keys="+keyIterator.next());
}
}
XMemcached提供的计数器
public static void showCounter() throwsException {
Counter counter= new Counter(client,"k5",10);long c1 =counter.incrementAndGet();
System.out.println("c1="+c1);long c2 =counter.decrementAndGet();
System.out.println("c2="+c2);long c3 = counter.addAndGet(88);
System.out.println("c3="+c3);long c4 = counter.addAndGet(-10000);
System.out.println("c4="+c4);
counter.set(50);long c5 =counter.get();
System.out.println("c5="+c5);
String key=counter.getKey();
System.out.println("key="+key);
}
测试结果:
更新数据过期时间
一般采用:
/*
1、先存入一条数据 【设置过过期时间 10个小时】
2、先获取待更新过期时间的数据
3、再通过 replace | set 方法,将数据修改回去,同时设置过期时间
*/
通过XMemcached,我们这样做:
/*
1、先存入一条数据 【设置过过期时间 10个小时】
2、直接使用touch进行更新过期时间
*/
public static void showTouch() throws Exception {
client.set("k1",3600,"Hello happy");
client.touch("k1",10);
}
演示命名空间
因为memcached中没有数据表的概念,XMemcached引入了命名空间的概念,可以对数据进行分块存储,而实际底层操作则是变相的修改key的名称来实现的。
public static void showNameSpace() throwsException {
String ns1= "ns1";
String ns2= "ns2";//赋值操作
client.withNamespace(ns1, new MemcachedClientCallable() {public String call(MemcachedClient memcachedClient) throwsMemcachedException, InterruptedException, TimeoutException {
memcachedClient.set("k10",0," Hello chenz!! ");return null;
}
});
String str= client.get("k10");
System.out.println("str="+str);
String k10= client.withNamespace(ns1, new MemcachedClientCallable() {public String call(MemcachedClient memcachedClient) throwsMemcachedException, InterruptedException, TimeoutException {return memcachedClient.get("k10");
}
});
System.out.println("k10="+k10);
String k102= client.withNamespace(ns2, new MemcachedClientCallable() {public String call(MemcachedClient memcachedClient) throwsMemcachedException, InterruptedException, TimeoutException {return memcachedClient.get("k10");
}
});
System.out.println("k102="+k102);
}
测试结果:
我们通过查询以下memcached中的所有key
可以看到前面三个是系统为我们创建并和namespace相关的,我们查询一下namespace:ns1的value值,即可看出其中端倪:
java xmemcached incr_XMemcached的基本使用相关推荐
- 基于java nio的memcached客户端——xmemcached
1.xmemcached是什么? xmemcached是基于java nio实现的memcached客户端API. 实际上是基于我实现的一个简单nio框架 http://code.google.com ...
- xmemcached发布1.3.4
开源的java memcached client-- xmemcached发布1.3.4版本,主要改进如下: 1.修复一个相对严重的bug,在解析二进制协议时如果遇到从服务端返回的错误信息,会导致连接 ...
- xmemcached发布1.3.6
开源的memcached Java客户端--xmemcached发布1.3.6版本. 主要改进如下: 1. 为MemcachedClientBuilder添加两个新方法用于配置: publi ...
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)
Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...
- spring集成xmemcached
2019独角兽企业重金招聘Python工程师标准>>> spring集成xmemcached <dependency><groupId>com.googlec ...
- XMemcached使用示例--转
Memcached 是一个高性能的分布式内存对象的key-value缓存系统,用于动态Web应用以减轻数据库负载,现在也有很多人将它作为内存式数据库在使用,memcached通过它的自定义协议与客户端 ...
- Java连接Memcached进行CRUD
参考这篇博文在本机安装了Memcached 在 Java 中常用的memcached有三个: Memcached Client for Java SpyMemcached XMemcached 这里使 ...
- Xmemcached学习笔记一(安装memcached)
memcached有三种java客户端 第一种:Com.danga 包下面的memcached,需引入jar(本人用的是memcached-2.5.2.jar 文末附上附件需要的可以下载) 第二种:s ...
- xmemcached spring 配置文件
memcached spring 配置文件 <bean class="java.net.InetSocketAddress" name="server1" ...
- 分布式缓存技术memcached学习系列(五)—— memcached java客户端的使用
Memcached的客户端简介 我们已经知道,memcached是一套分布式的缓存系统,memcached的服务端只是缓存数据的地方,并不能实现分布式,而memcached的客户端才是实现分布式的地方 ...
最新文章
- RDKit | 小分子构象的生成和比对
- Aspose.Cells小实例
- QT绘制散点图(1)
- JAVA 8 StreamAPI 和 lambda表达式 总结(一)--lambda表达式
- C和C++里面的lvalue 和 rvalue的释义
- ajax head带参数两次请求
- Java -- IO
- 第二届ATI获奖自动化测试工具介绍
- 得物(毒)app测试开发工程师面经
- 记录自建ALIDDNS服务域名解析和外网访问
- 基于hi3531压缩YUV-D1 H264(sample_enc例子改写)
- jndi step by step(2)
- 求解一元三次方程的方法
- 查询rssi指令_无线接收信号强度(RSSI)那些事儿
- 生物特征识别学科发展报告
- Lisp语言:循环控制
- windows安装TexStudio
- 一个“Scale AI”,让整个国内数据标注行业都酸了!
- 遥控器按键的工作原理
- 剪辑小知识,将多个MP4格式视频快速转换成MOV视频
热门文章
- 微信小程序赋能会员管理和会员营销互动
- POJ-1436___Horizontally Visible Segments —— 线段树
- srm32定时器的ETR功能
- HBuilder打包App教程
- 基于JAVA民航售票管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
- Xftp的下载和安装(超详细)
- Wemos D1 Mini / nodeMcu / esp8266 + GUIslice库 驱动ST7789 TFT显示屏
- 密码学基础(三)密码分析
- python 安装scapy_安装scapy时出错
- 简一论币:8.14 晚间BTC行情分析及操作建议