哪个是最好的 Java memcached 客户端,为什么?
7 回答
作为spymemcached的作者,我有点偏见,但我会说这是我的,原因如下:
从头开始设计,尽可能做到无阻塞。
当您请求数据、发布集合等时......有一个很小的并发队列插入,您会得到一个 Future 来阻止结果(对于常见情况,如 get 有一些方便的方法)。
积极优化
您可以在我的优化页面上阅读更多内容,但我会进行整个应用程序优化。
我在微基准测试中仍然做得很好,但是要与其他客户端进行公平比较,您必须设计不切实际的使用模式(例如,等待每个 set 操作的响应或围绕 get 构建锁以防止它们进行数据包优化)。
痴迷测试
我维护了一个非常严格的测试套件,每个版本都有覆盖率报告。
错误仍然存在,但它们通常很小,而且客户端只会越来越好。:)
有据可查
示例页面提供了快速介绍,但javadoc提供了非常详细的信息。
提供高级抽象
我有一个映射到缓存的接口以及一个功能性的 CAS 抽象。二进制和文本都支持 incr-with-default 机制(由二进制协议提供,但在文本中相当棘手)。
跟上规格
我在服务器本身上做了很多工作,所以我跟上协议的变化。
我完成了第一个二进制协议服务器实现(测试服务器和 memcached 本身),这是第一个支持它的生产就绪客户端,并且做到了一流。
我还支持几种散列算法和节点分布算法,所有这些算法都针对每个构建都经过了良好的测试。如果你想要更好的性能,你可以做一个股票 ketama 一致的哈希,或者使用 FNV-1(甚至是 java 的本机字符串哈希)的派生。
我相信memcached java 客户端是最好的客户端。
特征
- 二进制协议支持。访问存储在 memcached 服务器中的键/值的最快方法。
- UDP 协议支持。您可以使用 tcp 协议设置密钥,并使用 udp 协议获取。实际上,一些大公司正在这样做。
- 支持自定义序列化和反序列化。
- 带有 NIO 和直接缓冲区的连接池。连接池不使用时动态增加连接。
表现
- 有关现有流行的 memcached java 客户端的基准测试,请参阅性能。
- 接收响应时反序列化
- 对源代码的每一行进行性能调整。
如果这些数字仍然有效,那么... http://xmemcached.googlecode.com/svn/trunk/benchmark/benchmark.html
大约一年前,当我不得不使用 memcached java 客户端时,spymemcached 连接器被描述为具有更多功能的优化 API。从那时起,memcached 客户端已经发布了许多新版本,因此可能值得一试。
FWIW 间谍客户端对我来说非常有效。
我一直在使用 SpyMemcached,并且必须同意它是目前最好的,有很多更新的改进。
有用于 Java 的 memcached 客户端和spymemcached。不过两者都没有太多经验。
请尝试xmemcached,它也是基于 nio 并具有一些强大的功能。