写点什么

XMemcached——一个新的开源 Java memcached 客户端

  • 2009-10-21
  • 本文字数:1240 字

    阅读完需:约 4 分钟

XMemcached 是一个基于 Java nio 的 memcached 客户端。它线程安全,结构简单,支持所有的 memcached 文本协议和二进制协议,并且有比较优异的性能表现。它还支持一些高级特性,如 JMX、动态增删节点、客户端统计以及 nio 连接池等。InfoQ 中文站编辑采访了该工具的核心开发人员 Dennis Zhuang。

和同类型的 memcached 客户端相比,XMemcached 有什么特点?

与同是基于 java nio 的 spymemcached 相比来说,XMemcached 具有以下特点: 1)API 模型是同步,异步的 API 使用比较繁琐,在 memcached 协议加入 noreply 后,异步模型的存在价值就更可疑了;

2)支持设置 memcached 的节点权重;
3)支持动态增删节点,可以通过编程或者 JMX;
4)支持 nio 连接池,并且允许让用户对网络层面有更多的控制,提供更多的性能优化选项;
5)支持客户端数据统计;
6)支持 Kestrel ,Kestrel 是一个 scala 编写的 MQ server。

有其他项目使用 Xmemcached 吗?他们有没有给你一些有价值的反馈?

因为 xmemcached 是在今年下半年才开始发展的,因此用户并不多,就我所知有 rensea.com (人间网)、 dii.cn (滴,一种聊天工具)以及一些企业的内部项目在使用。非常感谢他们的信任。 rensea.com 的开发者给了我很大帮助,他们的持续使用给了我一些有价值的反馈,例如在 1.2.0-stable 刚发布的时候,由于引入了心跳检测,发现在特定场景下心跳检测会引起 xmemcached 的性能急剧下降,存储数据总是超时。最后通过查找发现是由于网络层在连接的 idle 判断条件上有遗漏。这个问题已经在 yanf4j 1.0.1 上及时修正。

XMemcached 在哪些方面还需要改进,下一步你计划实现哪些功能?

XMemcached 需要改进的地方有两个:文档和二进制协议的实现。文档很不完善,因为精力有限,我希望能补上更完善的用户指南。其次是二进制协议的实现,在效率上还有可以提高的地方。 另外,在 *nix 系统上,对于同一台主机的应用和 memcached,使用 unix domain socket 可以进一步提高效率,这也是 XMemcached 准备探索的一个方向。由于 Java 不支持 unix domain socket,可能需要通过 JNI 来实现。

在和人间网创始人兼 CTO 曹晓钢的沟通中,他谈到人间网不仅使用 XMemcached 连接到 memcached 服务器,也使用它连接到 kestrel 服务器,很稳定的支持了网站的需求。在选用 Xmemcached 之前,曹晓钢对几个类似的工具进行了评估:

主要的备选还有 spy memcached 和岑文初的 memcache-client-forjava 。开始的时候,我们选用的是 spy memcached。他的问题在于因为使用异步模型,使用比较繁琐,代码量比较大;看过 memcache-client-forjava 的代码,觉得其中夹杂了一些不应该由 memcached client 实现的功能,例如客户端缓存,比较担心其会带来一些潜在的问题。 选中 XMemcached 的另外一个原因是其经过了仔细的性能调试。当然最根本的一个原因是,当我们和开发者接触后,开发者的支持很到位,反应迅速,代码质量也很高。经过实际的验证,最终我们选定了 XMemcached。

有关 Xmemcached 项目的更多信息请浏览 Google Code 上的项目主页 wiki

2009-10-21 03:2110700

评论

发布
暂无评论
发现更多内容

DDD领域驱动设计的概念解析

乌龟哥哥

微服务 10月月更

JDK中自带的JVM分析工具

Java 架构

CLIP-as-service 0.8.0 版本发布:新增支持大型 ONNX 模型文件

Jina AI

开源 工程师 开发工具

Opencv 图像处理:图像基础操作与灰度转化

timerring

OpenCV 计算机视觉 10月月更

房产|1-9月份全国房地产开发投资下降8.0%

前嗅大数据

数据 房地产业 房地产

【移动应用安全】移动应用安全概述及超级用户权限获取

w010w

android 移动应用安全 root 10月月更

一行命令安装docker和docker-compose(CentOS7)

程序员欣宸

Docker Docker-compose 10月月更

HashMap源码分析(七)

知识浅谈

hashmap 10月月更

长安链源码分析之交易过程分析(1)

【一Go到底】第二十五天---内置函数和Go错误机制

指剑

Go golang 10月月更

Jenkins pipeline Git 检出的 Step

HoneyMoose

Opencv 图像处理:图像通道、直方图与色彩空间

timerring

OpenCV 图像处理 10月月更

长安链源码分析之交易过程分析(2)

fastposter v2.9.3 简单易用的海报生成器

物有本末

海报生成器 海报编辑器 海报生成

用户故事地图——让迭代计划灵动起来

Bruce Talk

Scrum User Story Product Owner User Story Mapping

JNI中实现类似C++回调方法-结构体操作

中国好公民st

c++ jni 10月月更

【译】深究 Go CPU profiler

非晓为骁

Go 翻译 pprof

从零到一搭建一个属于自己的博客系统(弎)

木偶

MySQL django 前端 10月月更

leetcode 191. Number of 1 Bits 位1的个数(简单)

okokabcd

LeetCode 数据结构与算法

高效IO之零拷贝技术

乌龟哥哥

10月月更

探索证券行业智能化升级核心引擎:成就客户价值

易观分析

证券

迷宫最短路径问题

lovevivi

数据结构 C语言 10月月更

Jenkins pipeline 如何到子文件中去执行命令

HoneyMoose

1024 分享|如何打造围绕开源理念的团队工程师文化

Jina AI

人工智能 开源 1024 1024我在现场

“程”风破浪的开发者|那些优化奇葩代码的方法

慕枫技术笔记

学习方法 代码 “程”风破浪的开发者

数据湖(十):Hive与Iceberg整合

Lansonli

数据湖 10月月更

CLIP-as-service 0.8.0 版本发布:新增支持大型 ONNX 模型文件

Jina AI

开源 工程师 开发工具 开源软件

【web 开发基础】PHP 快速入门(10)-PHP 其他运算符详解

迷彩

web开发 10月月更 PHP基础 三元运算符

应用数据库常见的数据切分方式

乌龟哥哥

数据库 10月月更

“程”风破浪的开发者|python GUI开发记录

衝鋒壹号

学习方法 个人成长 “程”风破浪的开发者

力扣刷题训练(二)

lovevivi

数据结构 C语言 10月月更

XMemcached——一个新的开源Java memcached客户端_Java_霍太稳@极客邦科技_InfoQ精选文章