02.XMemcached的使用
1.XMemcached基本使用
public static void main(String[] args) throws IOException, TimeoutException, InterruptedException, MemcachedException
{
MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("192.168.110.100:11211"));
MemcachedClient client = builder.build();
// set 命令用于将 value(数据值) 存储在指定的 key(键) 中
System.out.println("set :" + client.set("key001", 3600, "value001"));
// add 命令用于将 value(数据值) 存储在指定的 key(键) 中
System.out.println("add :" + client.add("key002", 3600, "value002"));
// replace 命令用于替换已存在的 key(键) 的 value(数据值)
System.out.println("replace :" + client.replace("key002", 3600, "value003"));
// append 命令用于向已存在 key(键) 的 value(数据值) 后面追加数据
System.out.println("append :" + client.append("key002", "value004"));
// prepend 命令用于向已存在 key(键) 的 value(数据值) 前面追加数据
System.out.println("prepend :" + client.prepend("key002", "value005"));
// CAS 命令用于执行一个"检查并设置"的操作它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入
GetsResponse<String> result = client.gets("key002");
long cas = result.getCas();
System.out.println("cas :" + client.cas("key002", 3600, "value002", cas));
// get 命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空
System.out.println("get :" + client.get("key001"));
// gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空
System.out.println("gets :" + client.gets("key002"));
// delete 命令用于删除已存在的 key(键)
System.out.println("delete :" + client.delete("key002"));
// incr 与 decr 命令用于对已存在的 key(键) 的数字值进行自增或自减操作
System.out.println("incr :" + client.incr("key002", 1L));
// stats 命令用于返回统计信息例如 PID(进程号)、版本号、连接数等
System.out.println("stats :" + client.stats(new InetSocketAddress("192.168.110.100", 11211)));
System.out.println("getStats :" + client.getStats());
// stats items 命令用于显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数)
System.out.println("getStatsByItem items :" + client.getStatsByItem("items"));
// stats slabs 命令用于显示各个slab的信息,包括chunk的大小、数目、使用情况等
System.out.println("getStatsByItem slabs :" + client.getStatsByItem("slabs"));
// stats sizes 命令用于显示所有item的大小和个数
System.out.println("getStatsByItem sizes :" + client.getStatsByItem("sizes"));
// flush_all 命令用于用于清理缓存中的所有 key=>value(键=>值) 对
client.flushAll();
System.out.println("OK!!!");
client.shutdown();
}
2.XMemcached深入使用
public static void main(String[] args) throws IOException, TimeoutException, InterruptedException, MemcachedException
{
// 集群服务器地址
String server = "192.168.110.100:11211 192.168.110.101:11211 192.168.110.102:11211 192.168.110.103:11211";
// 设置权重
int[] weights = new int[] { 1, 2, 3, 4 };
MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(server), weights);
// 客户端集群算法:一致性哈希。默认是:按照key的哈希值模以连接数得到的余数
builder.setSessionLocator(new KetamaMemcachedSessionLocator());
MemcachedClient client = builder.build();
// 返回可用的memcached服务器列表
System.out.println(client.getAvailableServers());
for (int i = 0; i < 100; i++)
{
System.out.print(client.set("key-" + i, 3600, "value-" + i) + "-");
}
System.out.println("\nOK!!!");
client.shutdown();
}
public static void main(String[] args) throws IOException, InterruptedException
{
MemcachedClientBuilder builder = new XMemcachedClientBuilder();
MemcachedClient client = builder.build();
System.out.println(client.getAvailableServers());
client.addServer("192.168.110.100", 11211, 1);
client.addServer("192.168.110.101", 11211, 2);
client.addServer("192.168.110.102", 11211, 3);
client.addServer("192.168.110.103", 11211, 4);
System.out.println(client.getAvailableServers());
client.removeServer("192.168.110.102:11211 192.168.110.103:11211");
Thread.sleep(100); // 由于xmemcached是多线程操作,所以休眠一段时间才能看到效果
System.out.println(client.getAvailableServers());
System.out.println("OK!!!");
client.shutdown();
}
public static void main(String[] args) throws IOException
{
MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("192.168.110.100:11211"));
// 设置客户端集群的算法实现
builder.setSessionLocator(new KetamaMemcachedSessionLocator());
// 使用二进制协议
builder.setCommandFactory(new BinaryCommandFactory());
// Nio连接池
builder.setConnectionPoolSize(5);
// Failure模式和standby节点
builder.setFailureMode(true);
// 与tokyotyrant交互
builder.setTranscoder(new TokyoTyrantTranscoder());
MemcachedClient memcachedClient = builder.build();
memcachedClient.shutdown();
}
MemcachedClient builder=new XmemcachedClientBuilder(AddrUtil.getAddressMap("localhost:11211,localhost:11212 host2:11211,host2:11212"));
<!-- Memcached客户端工厂配置 -->
<bean name="memcachedClient" class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean" destroy-method="shutdown">
<!-- Memcached的服务器集群 -->
<property name="servers">
<!-- <value>host1:port1 host2:port2 host3:port3</value> -->
<value>${memcached.host1}</value>
</property>
<!-- 客户端节点权重设置,对应上面的servers配置 -->
<property name="weights">
<list>
<value>${memcached.host1.weight}</value>
</list>
</property>
<!-- 设置连接池的大小 -->
<property name="connectionPoolSize" value="2"></property>
<!-- 使用二进制协议通讯,默认为TextCommandFactory -->
<property name="commandFactory">
<bean class="net.rubyeye.xmemcached.command.BinaryCommandFactory"></bean>
</property>
<!-- 分布式策略 -->
<property name="sessionLocator">
<bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"></bean>
</property>
<!-- 序列化转码器 -->
<property name="transcoder">
<bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" />
</property>
<!-- 缓冲区分配器 -->
<property name="bufferAllocator">
<bean class="net.rubyeye.xmemcached.buffer.SimpleBufferAllocator"></bean>
</property>
<!-- 设置验证信息 -->
<!--
<property name="authInfoMap">
<map>
<entry key-ref="server1">
<bean class="net.rubyeye.xmemcached.auth.AuthInfo" factory-method="typical">
<constructor-arg index="0">
<value>index</value>
</constructor-arg>
<constructor-arg index="1">
<value>index-pd</value>
</constructor-arg>
</bean>
</entry>
</map>
</property>
-->
</bean>
@Autowired
@Qualifier("memcachedClient")
private MemcachedClient memcachedClient;
02.XMemcached的使用的更多相关文章
- Xmemcached的FAQ和性能调整建议
转载 http://www.blogjava.net/killme2008/archive/2014/02/13/325564.html 一.XMemcached是什么?经常碰到的一个问题是很多朋友对 ...
- Kotlin中变量不同于Java: var 对val(KAD 02)
原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 时间:Nov 28, 201 ...
- Android游戏开发实践(1)之NDK与JNI开发02
Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI开发01分享完JNI的基础和简要开发流程之后,再来分享下在Android环境下的JNI ...
- iOS系列 基础篇 02 StoryBoard 故事板文件
iOS基础 02 StoryBoard 故事板文件 目录: 1. 故事板的导航特点 2. 故事板中的Scene和Segue 3. 本文最后 在上篇HelloWorld工程中有一个Main.storyb ...
- [转]Tesseract 3.02中文字库训练
下载chi_sim.traindata字库下载tesseract-ocr-setup-3.02.02.exe 下载地址:http://code.google.com/p/tesseract-ocr/d ...
- Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock
本章对ReentrantLock包进行基本介绍,这一章主要对ReentrantLock进行概括性的介绍,内容包括:ReentrantLock介绍ReentrantLock函数列表ReentrantLo ...
- Oracle Recovery 02 - 常规恢复之不完全恢复
背景:这里提到的常规恢复指的是数据库有完备可用的RMAN物理备份. 实验环境:RHEL6.4 + Oracle 11.2.0.4 单实例. 二.常规恢复之不完全恢复:部分数据丢失 2.1 重做日志文件 ...
- 异步编程系列第02章 你有什么理由使用Async异步编程
p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提 ...
- star ccm+ 11.02安装
STAR CCM+是CD-Adapco公司的主打软件,其安装方式较为简单,这里以图文方式详细描述STAR CCM+11.02安装过程. 1 安装准备工作2 正式安装3 软件破解4 软件测试 1 安装准 ...
随机推荐
- NSBundle UIImageView &UIButton
1.NSBundle 1> 一个NSBundle代表一个文件夹,利用NSBundle能访问对应的文件夹 2> 利用mainBundle就可以访问软件资源包中的任何资源 3> 模拟器应 ...
- Eruda——手机网页前端调试面板
前言 进行移动端网页开发时,想要查看手机浏览器信息从来都不是一件容易的事.特别是当目标环境为APP内置WebView,需要调用特定的JsBridge接口时,你根本都干不了什么,只能一遍又一遍地修改代码 ...
- “Unable to resolve target 'android-9'”的问题
SDK版本问题! 如果导入时,eclipse的console中提示信息:“Unable to resolve target 'android-9'” 可能的问题就是你安装的SDK版本高于项目的版本!( ...
- Javascript的四种继承方式
在Javascript中,所有开发者定义的类都可以作为基类,但出于安全性考虑,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码,因为这些代码可以被用于恶意攻击. 选定基类后,就可 ...
- N进制数组转换成正整数
给定一个任意长度的数组,其中的元素按照一定的进制(N进制)来转换成正整数 //把数组中的元素按照N进制转换成为正整数 #include <stdio.h> #include <std ...
- 第十四章 调试及安全性(In .net4.5) 之 对称及非对称加密
1. 概述 本章内容包括:对称及非对称加密算法..net中的加密类.使用哈希操作.创建和管理签名认证.代码访问权限 和 加密字符串. 2. 主要内容 2.1 使用对称和非对称加密 ① 对称加密:使用同 ...
- centos php-fpm nginx配置
移除旧的软件包:yum remove httpd* php* 安装:yum install php php-fpm yum install php-gd php-mysql php-mbstring ...
- iOS学习之UIControl
一.UIControl初识 1.UIControl是有控制功能的视图(比如UIButton.UISlider.UISegmentedControl等)的父类. 只要跟控制有关的控件都是继承于 ...
- IOS中的UINavigationController(导航控制器)
UINavigationController UINavigationControlle:导航控制器,是iOS中最常用的多视图控制器之一,它用来管理多个试图控制器 导航控制器可以认为是管理控制器的控制 ...
- swift someObject == nil 如何实现
以前的编程经验告诉我们判断一个对象是否为空或者是否实例化可以这样 if(someObject == nil){ //do something }else{ } 但是在Swift中这样是不行的,然后我在 ...