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的基本使用相关推荐

  1. 基于java nio的memcached客户端——xmemcached

    1.xmemcached是什么? xmemcached是基于java nio实现的memcached客户端API. 实际上是基于我实现的一个简单nio框架 http://code.google.com ...

  2. xmemcached发布1.3.4

    开源的java memcached client-- xmemcached发布1.3.4版本,主要改进如下: 1.修复一个相对严重的bug,在解析二进制协议时如果遇到从服务端返回的错误信息,会导致连接 ...

  3. xmemcached发布1.3.6

    开源的memcached Java客户端--xmemcached发布1.3.6版本.     主要改进如下: 1.  为MemcachedClientBuilder添加两个新方法用于配置: publi ...

  4. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

  5. spring集成xmemcached

    2019独角兽企业重金招聘Python工程师标准>>> spring集成xmemcached <dependency><groupId>com.googlec ...

  6. XMemcached使用示例--转

    Memcached 是一个高性能的分布式内存对象的key-value缓存系统,用于动态Web应用以减轻数据库负载,现在也有很多人将它作为内存式数据库在使用,memcached通过它的自定义协议与客户端 ...

  7. Java连接Memcached进行CRUD

    参考这篇博文在本机安装了Memcached 在 Java 中常用的memcached有三个: Memcached Client for Java SpyMemcached XMemcached 这里使 ...

  8. Xmemcached学习笔记一(安装memcached)

    memcached有三种java客户端 第一种:Com.danga 包下面的memcached,需引入jar(本人用的是memcached-2.5.2.jar 文末附上附件需要的可以下载) 第二种:s ...

  9. xmemcached spring 配置文件

    memcached spring 配置文件 <bean class="java.net.InetSocketAddress" name="server1" ...

  10. 分布式缓存技术memcached学习系列(五)—— memcached java客户端的使用

    Memcached的客户端简介 我们已经知道,memcached是一套分布式的缓存系统,memcached的服务端只是缓存数据的地方,并不能实现分布式,而memcached的客户端才是实现分布式的地方 ...

最新文章

  1. RDKit | 小分子构象的生成和比对
  2. Aspose.Cells小实例
  3. QT绘制散点图(1)
  4. JAVA 8 StreamAPI 和 lambda表达式 总结(一)--lambda表达式
  5. C和C++里面的lvalue 和 rvalue的释义
  6. ajax head带参数两次请求
  7. Java -- IO
  8. 第二届ATI获奖自动化测试工具介绍
  9. 得物(毒)app测试开发工程师面经
  10. 记录自建ALIDDNS服务域名解析和外网访问
  11. 基于hi3531压缩YUV-D1 H264(sample_enc例子改写)
  12. jndi step by step(2)
  13. 求解一元三次方程的方法
  14. 查询rssi指令_无线接收信号强度(RSSI)那些事儿
  15. 生物特征识别学科发展报告
  16. Lisp语言:循环控制
  17. windows安装TexStudio
  18. 一个“Scale AI”,让整个国内数据标注行业都酸了!
  19. 遥控器按键的工作原理
  20. 剪辑小知识,将多个MP4格式视频快速转换成MOV视频

热门文章

  1. 微信小程序赋能会员管理和会员营销互动
  2. POJ-1436___Horizontally Visible Segments —— 线段树
  3. srm32定时器的ETR功能
  4. HBuilder打包App教程
  5. 基于JAVA民航售票管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
  6. Xftp的下载和安装(超详细)
  7. Wemos D1 Mini / nodeMcu / esp8266 + GUIslice库 驱动ST7789 TFT显示屏
  8. 密码学基础(三)密码分析
  9. python 安装scapy_安装scapy时出错
  10. 简一论币:8.14 晚间BTC行情分析及操作建议