关于XMemcached的介绍或文档请参考:https://code.google.com/p/xmemcached/wiki/User_Guide_zh
    关于Memcached的命令及使用请参考:http://www.runoob.com/memcached/memcached-stats.html

1.XMemcached基本使用

1.使用XMemcached的简单例子
  1. public static void main(String[] args) throws IOException, TimeoutException, InterruptedException, MemcachedException
  2. {
  3. MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("192.168.110.100:11211"));
  4. MemcachedClient client = builder.build();
  5. // set 命令用于将 value(数据值) 存储在指定的 key(键) 中
  6. System.out.println("set :" + client.set("key001", 3600, "value001"));
  7. // add 命令用于将 value(数据值) 存储在指定的 key(键) 中
  8. System.out.println("add :" + client.add("key002", 3600, "value002"));
  9. // replace 命令用于替换已存在的 key(键) 的 value(数据值)
  10. System.out.println("replace :" + client.replace("key002", 3600, "value003"));
  11. // append 命令用于向已存在 key(键) 的 value(数据值) 后面追加数据
  12. System.out.println("append :" + client.append("key002", "value004"));
  13. // prepend 命令用于向已存在 key(键) 的 value(数据值) 前面追加数据
  14. System.out.println("prepend :" + client.prepend("key002", "value005"));
  15. // CAS 命令用于执行一个"检查并设置"的操作它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入
  16. GetsResponse<String> result = client.gets("key002");
  17. long cas = result.getCas();
  18. System.out.println("cas :" + client.cas("key002", 3600, "value002", cas));
  19. // get 命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空
  20. System.out.println("get :" + client.get("key001"));
  21. // gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空
  22. System.out.println("gets :" + client.gets("key002"));
  23. // delete 命令用于删除已存在的 key(键)
  24. System.out.println("delete :" + client.delete("key002"));
  25. // incr 与 decr 命令用于对已存在的 key(键) 的数字值进行自增或自减操作
  26. System.out.println("incr :" + client.incr("key002", 1L));
  27. // stats 命令用于返回统计信息例如 PID(进程号)、版本号、连接数等
  28. System.out.println("stats :" + client.stats(new InetSocketAddress("192.168.110.100", 11211)));
  29. System.out.println("getStats :" + client.getStats());
  30. // stats items 命令用于显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数)
  31. System.out.println("getStatsByItem items :" + client.getStatsByItem("items"));
  32. // stats slabs 命令用于显示各个slab的信息,包括chunk的大小、数目、使用情况等
  33. System.out.println("getStatsByItem slabs :" + client.getStatsByItem("slabs"));
  34. // stats sizes 命令用于显示所有item的大小和个数
  35. System.out.println("getStatsByItem sizes :" + client.getStatsByItem("sizes"));
  36. // flush_all 命令用于用于清理缓存中的所有 key=>value(键=>值) 对
  37. client.flushAll();
  38. System.out.println("OK!!!");
  39. client.shutdown();
  40. }
2.XMemcached主要类关系结构

2.XMemcached深入使用

    想了解XMemcached更全面的使用可以参考:https://code.google.com/p/xmemcached/wiki/User_Guide_zh这里只介绍常用的功能
1.使用Memcached集群(客户端集群)
  1. public static void main(String[] args) throws IOException, TimeoutException, InterruptedException, MemcachedException
  2. {
  3. // 集群服务器地址
  4. String server = "192.168.110.100:11211 192.168.110.101:11211 192.168.110.102:11211 192.168.110.103:11211";
  5. // 设置权重
  6. int[] weights = new int[] { 1, 2, 3, 4 };
  7. MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(server), weights);
  8. // 客户端集群算法:一致性哈希。默认是:按照key的哈希值模以连接数得到的余数
  9. builder.setSessionLocator(new KetamaMemcachedSessionLocator());
  10. MemcachedClient client = builder.build();
  11. // 返回可用的memcached服务器列表
  12. System.out.println(client.getAvailableServers());
  13. for (int i = 0; i < 100; i++)
  14. {
  15. System.out.print(client.set("key-" + i, 3600, "value-" + i) + "-");
  16. }
  17. System.out.println("\nOK!!!");
  18. client.shutdown();
  19. }
2.动态增删节点
  1. public static void main(String[] args) throws IOException, InterruptedException
  2. {
  3. MemcachedClientBuilder builder = new XMemcachedClientBuilder();
  4. MemcachedClient client = builder.build();
  5. System.out.println(client.getAvailableServers());
  6. client.addServer("192.168.110.100", 11211, 1);
  7. client.addServer("192.168.110.101", 11211, 2);
  8. client.addServer("192.168.110.102", 11211, 3);
  9. client.addServer("192.168.110.103", 11211, 4);
  10. System.out.println(client.getAvailableServers());
  11. client.removeServer("192.168.110.102:11211 192.168.110.103:11211");
  12. Thread.sleep(100); // 由于xmemcached是多线程操作,所以休眠一段时间才能看到效果
  13. System.out.println(client.getAvailableServers());
  14. System.out.println("OK!!!");
  15. client.shutdown();
  16. }
3.设置连接池和其他配置
  1. public static void main(String[] args) throws IOException
  2. {
  3. MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("192.168.110.100:11211"));
  4. // 设置客户端集群的算法实现
  5. builder.setSessionLocator(new KetamaMemcachedSessionLocator());
  6. // 使用二进制协议
  7. builder.setCommandFactory(new BinaryCommandFactory());
  8. // Nio连接池
  9. builder.setConnectionPoolSize(5);
  10. // Failure模式和standby节点
  11. builder.setFailureMode(true);
  12. // 与tokyotyrant交互
  13. builder.setTranscoder(new TokyoTyrantTranscoder());
  14. MemcachedClient memcachedClient = builder.build();
  15. memcachedClient.shutdown();
  16. }
Failure模式和standby节点说明:xmemcached还支持主辅模式,你可以设置一个memcached的节点的备份节点,当主节点down掉的情况下,会将本来应该发往主节点的请求转发给standby备份节点。使用备份节点的前提是启用failure模式。示例如下:
  1. MemcachedClient builder=new XmemcachedClientBuilder(AddrUtil.getAddressMap("localhost:11211,localhost:11212 host2:11211,host2:11212"));
上面的例子,将localhost:11211的备份节点设置为localhost:11212,而将host2:11211的备份节点设置为host2:11212
4.与Spring集成
配置如下:
  1. <!-- Memcached客户端工厂配置 -->
  2. <bean name="memcachedClient" class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean" destroy-method="shutdown">
  3. <!-- Memcached的服务器集群 -->
  4. <property name="servers">
  5. <!-- <value>host1:port1 host2:port2 host3:port3</value> -->
  6. <value>${memcached.host1}</value>
  7. </property>
  8. <!-- 客户端节点权重设置,对应上面的servers配置 -->
  9. <property name="weights">
  10. <list>
  11. <value>${memcached.host1.weight}</value>
  12. </list>
  13. </property>
  14. <!-- 设置连接池的大小 -->
  15. <property name="connectionPoolSize" value="2"></property>
  16. <!-- 使用二进制协议通讯,默认为TextCommandFactory -->
  17. <property name="commandFactory">
  18. <bean class="net.rubyeye.xmemcached.command.BinaryCommandFactory"></bean>
  19. </property>
  20. <!-- 分布式策略 -->
  21. <property name="sessionLocator">
  22. <bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"></bean>
  23. </property>
  24. <!-- 序列化转码器 -->
  25. <property name="transcoder">
  26. <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" />
  27. </property>
  28. <!-- 缓冲区分配器 -->
  29. <property name="bufferAllocator">
  30. <bean class="net.rubyeye.xmemcached.buffer.SimpleBufferAllocator"></bean>
  31. </property>
  32. <!-- 设置验证信息 -->
  33. <!--
  34. <property name="authInfoMap">
  35. <map>
  36. <entry key-ref="server1">
  37. <bean class="net.rubyeye.xmemcached.auth.AuthInfo" factory-method="typical">
  38. <constructor-arg index="0">
  39. <value>index</value>
  40. </constructor-arg>
  41. <constructor-arg index="1">
  42. <value>index-pd</value>
  43. </constructor-arg>
  44. </bean>
  45. </entry>
  46. </map>
  47. </property>
  48. -->
  49. </bean>
使用时要注意:
    因为XMemcachedClientFactoryBean申明是“public class XMemcachedClientFactoryBean implements FactoryBean”实现了Spring FactoryBean接口,所以使用时不能直接获取XMemcachedClientFactoryBean类对象,使用方式如下,应该注入MemcachedClient对象:
  1. @Autowired
  2. @Qualifier("memcachedClient")
  3. private MemcachedClient memcachedClient;
-------------------------------------------------------------------------------------------------------------------------------

02.XMemcached的使用的更多相关文章

  1. Xmemcached的FAQ和性能调整建议

    转载 http://www.blogjava.net/killme2008/archive/2014/02/13/325564.html 一.XMemcached是什么?经常碰到的一个问题是很多朋友对 ...

  2. Kotlin中变量不同于Java: var 对val(KAD 02)

    原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 时间:Nov 28, 201 ...

  3. Android游戏开发实践(1)之NDK与JNI开发02

    Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI开发01分享完JNI的基础和简要开发流程之后,再来分享下在Android环境下的JNI ...

  4. iOS系列 基础篇 02 StoryBoard 故事板文件

    iOS基础 02 StoryBoard 故事板文件 目录: 1. 故事板的导航特点 2. 故事板中的Scene和Segue 3. 本文最后 在上篇HelloWorld工程中有一个Main.storyb ...

  5. [转]Tesseract 3.02中文字库训练

    下载chi_sim.traindata字库下载tesseract-ocr-setup-3.02.02.exe 下载地址:http://code.google.com/p/tesseract-ocr/d ...

  6. Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock

    本章对ReentrantLock包进行基本介绍,这一章主要对ReentrantLock进行概括性的介绍,内容包括:ReentrantLock介绍ReentrantLock函数列表ReentrantLo ...

  7. Oracle Recovery 02 - 常规恢复之不完全恢复

    背景:这里提到的常规恢复指的是数据库有完备可用的RMAN物理备份. 实验环境:RHEL6.4 + Oracle 11.2.0.4 单实例. 二.常规恢复之不完全恢复:部分数据丢失 2.1 重做日志文件 ...

  8. 异步编程系列第02章 你有什么理由使用Async异步编程

    p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提 ...

  9. star ccm+ 11.02安装

    STAR CCM+是CD-Adapco公司的主打软件,其安装方式较为简单,这里以图文方式详细描述STAR CCM+11.02安装过程. 1 安装准备工作2 正式安装3 软件破解4 软件测试 1 安装准 ...

随机推荐

  1. CentOS 6 lnmp环境脚本

    实验环境:CentOS 6.3 32位 首先我们先去下载nginx的第三方yum源 mkdir /shell cd /shell wget http://www.atomicorp.com/insta ...

  2. Windows Server 2003 增加远程用户个数

    1.进入“开始”-“控制面板”-“添加或删除程序”如下图: 2.点击“添加/删除windows组件(A)”,进入如下图 如果该服务器没有安装“终端服务器”和“终端服务器授权”组件的话,则需要使用系统光 ...

  3. MYSQL的存储引擎一般只要哪些?

    根据个人个人见解: MySQL的存储引擎(构成.安全.锁) Myisam:数据操作快速的一种引擎,支持全文检索.文件保存在数据库名称为目录名的 目录中,有3个文件,分别是表定义文件(.frm).数据文 ...

  4. 如何验证 jemalloc 优化 Nginx 是否生效

    Jemalloc 源于 Jason Evans 2006年在 BSDcan conference 发表的论文:<A Scalable Concurrent malloc Implementati ...

  5. Mysql查询(笔记二)

    1.两结构相同的表数据间移植 Inset into 表一 Select 字段1,字段2,....字段n from表二 建立数据库时设置数据库编码 create database 数据库名 charse ...

  6. 百度搜索API v3版本与soap

    技术文档请参考http://dev2.baidu.com/docs.do?product=2#page=File,和http://dev2.baidu.com/docs.do?product=2#pa ...

  7. php 递归 适合刚刚接解递归的人看

    递归,就是自己调用自己,当满足某条件时层层退出(后进先出). --------------------------------------------------------------------- ...

  8. Python之定向爬虫Scrapy

    1.Scrapy介绍 Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试 ...

  9. Java4Android

    变量 在计算机中存储信息需要声明变量的位置和所需的内存空间 boolean true false char ASCII字符集 计算机中所有数据都使用二进制表示 例如:a,b,c 适用七位二进制数进行表 ...

  10. 【微网站开发】之微信内置浏览器API使用

    最近在写微网站,发现了微信内置浏览器的很多不称心的地方: 1.安卓版的微信内浏览器底部总是出现一个刷新.前进.后退的底部栏,宽度很大,导致屏幕显示尺寸被压缩 2.分享当前网站至朋友圈时,分享的图片一般 ...