Xmemcached v2.0.1 发布,一个memcached客户端

jopen 4年前
   <p style="text-align: center;"><img alt="" src="https://simg.open-open.com/show/ec1a88dc0c96c34a67048d410b0496e4.png" /></p>    <p>XMemcached是一个高性能memcached客户端 。 主要特性:</p>    <h3>高性能</h3>    <p>XMemcached同样是基于java nio的客户端,java nio相比于传统阻塞io模型来说,有效率高(特别在高并发下)和资源耗费相对较少的优点。传统阻塞IO为了提高效率,需要创建一定数量的连接形成连接池,而nio仅需要一个连接即可(当然,nio也是可以做池化处理),相对来说减少了线程创建和切换的开销,这一点在高并发下特别明显。因此XMemcached与Spymemcached在性能都非常优秀,在某些方面(存储的数据比较小的情况下)Xmemcached比Spymemcached的表现更为优秀,具体可以看这个<a href="/misc/goto?guid=4958992736340149249">Java Memcached Clients Benchmark</a>。</p>    <h3>支持完整的协议</h3>    <p>Xmemcached支持所有的memcached协议,包括1.4.0正式开始使用的<a href="/misc/goto?guid=4958992736450982988">二进制协议</a>。</p>    <h3>支持客户端分布</h3>    <p>Memcached的分布只能通过客户端来实现,XMemcached实现了此功能,并且提供了一致性哈希(consistent hash)算法的实现。</p>    <h3>允许设置节点权重</h3>    <p>XMemcached允许通过设置节点的权重来调节memcached的负载,设置的权重越高,该memcached节点存储的数据将越多,所承受的负载越大。</p>    <h3>动态增删节点</h3>    <p>XMemcached允许通过JMX或者代码编程实现节点的动态添加或者移除,方便用户扩展和替换节点等。</p>    <h3>支持JMX</h3>    <p>XMemcached通过JMX暴露的一些接口,支持client本身的监控和调整,允许动态设置调优参数、查看统计数据、动态增删节点等。</p>    <h3>与Spring框架和Hibernate-memcached的集成</h3>    <p>鉴于很多项目已经使用Spring作为IOC容器,因此XMemcached也提供了对Spring框架的集成支持。<a href="/misc/goto?guid=4958992736561732732">Hibernate-memcached</a>是一个允许将memcached作为hibernate的二级缓存的开源项目,默认是使用Spymemcached,Xmemcached提供了对这个项目的支持,允许替换Spymemcached.</p>    <h3>客户端连接池</h3>    <p>刚才已经提到java nio通常对一个memcached节点使用一个连接,而XMemcached同样提供了设置连接池的功能,对同一个memcached可以创建N个连接组成连接池来提高客户端在高并发环境下的表现,而这一切对使用者来说却是透明的。启用连接池的前提条件是保证数据之间的独立性或者数据更新的同步,对同一个节点的各个连接之间是没有做更新同步的,因此应用需要保证数据之间是相互独立的或者全部采用CAS更新来保证原子性。</p>    <h3>可扩展性</h3>    <p>XMemcached是基于java nio框架<a href="/misc/goto?guid=4958992736674618027">yanf4j</a>实现的,因此在实现上结构相对清楚,分层比较明晰,在xmemcached 1.2.5之后已经将yanf4j合并到xmemcached,因此不再需要依赖yanf4j,下面是XMemcached的主要类的UML图:</p>    <p><img alt="" src="https://simg.open-open.com/show/d5724a17842d30d94109880b040042c5.jpg" /></p>    <h2>更新日志</h2>    <ul>     <li>将心跳和连接修复线程设置为 daemon 线程。</li>     <li>默认关闭客户端的 shutdown hook,如果需要开启,可以通过启动传参 <code>-Dxmemcached.shutdown.hook.enable=true</code>。</li>     <li>改进了内部日志,更符合习惯。</li>     <li>修复二进制协议的 Auth 授权实现。</li>     <li>新增 <code>setSelectorPoolSize</code> 可用于单独设置每个客户端实例的 NIO Reactor 线程池大小。</li>     <li>特别感谢 <a href="/misc/goto?guid=4958992736785991982">bmahe</a>,做了很多代码清理和重构的工作。</li>     <li>一些小的内部 Bug 修复,感谢所有贡献 PR 的朋友。</li>     <li>搬迁了<a href="/misc/goto?guid=4958992736892043654">文档</a>和设计了新首页 <a href="/misc/goto?guid=4958992737003255157">http://fnil.net/xmemcached/</a>。</li>    </ul>    <h2>下载</h2>    <ul>     <li><a href="/misc/goto?guid=4958992737121519200" rel="nofollow"><strong>xmemcached-2.0.1.zip</strong></a></li>     <li><a href="/misc/goto?guid=4958992737231526042" rel="nofollow"><strong>Source code</strong> (zip)</a></li>     <li><a href="/misc/goto?guid=4958992737338845935" rel="nofollow"><strong>Source code</strong> (tar.gz)</a></li>    </ul>    <h2> </h2>