当前位置: 首页 > news >正文

xmemcached发布1.1.2 (权重、noreply、spring集成)

XMemcached发布1.1.2版本,这一版本仍然是1.1.0版本以来的改进版本,主要的改进如下:

1.支持设置memcached 节点权重,权重高的负载相应比较大。

2.为部分协议添加 noreply选项,memcached 1.2.5引入了noreply支持,部分文本协议(如存储,删除,incr/decr等)允许附加设置一个noreply,表示客户端不要求memcached应答。这一特性利于批量处理。

3.支持与 spring框架的集成

4.添加 verbosity协议,这个协议用于让客户端设置memcached的日志输出级别。

5.一些细节改进。XMemcached从0.5开始就有重连机制,在连接意外断开的情况下会不断地自动重连,不过间隔是10秒,现在改成将间隔缩小为0秒以便客户端能及时连接。改进了JMX支持,可以通过JMX查看节点权重和动态设置节点权重。

6.BUG修复,包括:Issue 35、Issue 36、Issue 37、Issue 38等,具体请看 这里

7.去除了对spy-2.4.jar依赖,现在序列化部分已经不再需要spymemcached的这个jar包。


项目主页: http://code.google.com/p/xmemcached/
下载地址: http://code.google.com/p/xmemcached/downloads/list
wiki地址: http://code.google.com/p/xmemcached/w/list


    下面是关于特性的详细说明,首先是权重的使用,看例子:
    MemcachedClientBuilder builder  =   new XMemcachedClientBuilder(AddrUtil.getAddresses( " localhost:12000 localhost:12001 " ), new   int []{ 1 , 3 });
    MemcachedClient memcachedClient
= builder.build();
   
    现在的 XMemcachedClientBuilder允许传入了两个参数,一个是InetSocketAddress组成的列表,一个是权重的数组,权重数组的元素与列表中的地址一一对应,例如这里就是将"localhost:12000"节点的权重设置为1,而将"localhost:12001"的权重设置为3。同样在XMemcachedClientMBean中添加了两个新的方法:

    
public   void  addOneServerWithWeight(String server,  int  weight)
            
throws  IOException;


    
/**
     * Set a memcached server's weight
     * 
     * 
@param  server
     * 
@param  weight
     
*/
    
public   void  setServerWeight(String server,  int  weight);

    用于动态添加和修改节点的权重。

    其次,为了支持 noreply选项,MemcachedClient接口引入了系列xxxWithNoReply方法,例如
public   abstract   void  setWithNoReply( final  String key,  final   int  exp,
            
final  Object value)  throws  InterruptedException, MemcachedException;

    
public   abstract   < T >   void  setWithNoReply( final  String key,  final   int  exp,
            
final  T value,  final  Transcoder < T >  transcoder)
            
throws  InterruptedException, MemcachedException;

public   abstract   void  addWithNoReply( final  String key,  final   int  exp,
            
final  Object value)  throws  InterruptedException, MemcachedException;
public   abstract   void  replaceWithNoReply( final  String key,  final   int  exp,
            
final  Object value)  throws  InterruptedException, MemcachedException;
public   void  deleteWithNoReply( final  String key)
            
throws  InterruptedException, MemcachedException;

   完整的列表请看changelog.txt, noreply系列方法非常适合于批量处理,比之需要等待memcached应答的效率上提升很多。

   第三,与spring的集成,通过XMemcachedClientFactoryBean可以很方便地与spring框架集成,最简单的配置如下:
   < bean  name ="memcachedClient"
        class
="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean" >
        
< property  name ="servers" >
            
< value > localhost:12000 localhost:12001 </ value >
        
</ property >
    
</ bean >
  
   只要设置servers属性,那么就可以在任何需要的地方引用memcachedClient这个Bean.更完整的配置参考 wiki

   第四,引入了对verbosity协议的支持,通过两个新方法:
     public   void  setLoggingLevelVerbosity(InetSocketAddress address,  int  level)
            
throws  TimeoutException, InterruptedException, MemcachedException;

    
public   void  setLoggingLevelVerbosityWithNoReply(InetSocketAddress address,
            
int  level)  throws  InterruptedException, MemcachedException;

   
   其中的level就是日志级别。请注意你的memcached版本是否支持这一协议。

    1.1.2是一个承前启后的版本,按俺的计划应该还有个1.1.3(专注性能改进和优化),之后才是实现了二进制协议的1.2.0。俺非常希望能有任何人给出任何建议和bug反馈。

文章转自庄周梦蝶  ,原文发布时间2009-06-21

相关文章:

  • tomcat8.5报错
  • Clojure世界:利用HouseMD诊断clojure
  • pat解题报告【1082】
  • Java IO详解(七)------随机访问文件流
  • Spring+SpringMVC+MyBatis深入学习及搭建(三)——MyBatis全局配置文件解析
  • 硬链接和软链接
  • 【python自制】让大白成为你的个人助手!
  • java RabbitMQ
  • linux 21的用法
  • shell脚本编程30分钟入门上手
  • 跟着实例学习ZooKeeper的用法: Leader选举
  • R语言数据可视化2—ggplot2各种维度的业务量统计根据类型统计不同月份的业务量...
  • 使用InteliJ IDEA导出jar包执行报错:找不到主清单属性
  • Ubuntu14.04下sogou输入法的输入框只显示英文不显示中文的问题
  • CentOS 7 更新源 – 使用国内 163 yum 源
  • 《Java编程思想》读书笔记-对象导论
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【Amaple教程】5. 插件
  • 【刷算法】从上往下打印二叉树
  • angular组件开发
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Js基础知识(四) - js运行原理与机制
  • Koa2 之文件上传下载
  • 创建一个Struts2项目maven 方式
  • 多线程 start 和 run 方法到底有什么区别?
  • 分布式任务队列Celery
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 异步
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #pragam once 和 #ifndef 预编译头
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (02)vite环境变量配置
  • (2)MFC+openGL单文档框架glFrame
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二)hibernate配置管理
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转)EOS中账户、钱包和密钥的关系
  • (转)JAVA中的堆栈
  • (转)linux下的时间函数使用
  • (转载)Linux 多线程条件变量同步
  • *Django中的Ajax 纯js的书写样式1
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net core webapi 大文件上传到wwwroot文件夹
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET MVC第三章、三种传值方式