【迁移2015-09-08 16:03】Kestrel(二)
2018-08-10 10:02
218 查看
Kestrel Java Client
XMemcached,看名字好像它和Memcached有关系。对了,Memcached是一个开源的,C写的分布式key-value缓存,XMemcached是它的一个访问客户端。XMemcached为Memcached而生,它支持如下特性:
支持所有的文本协议和二进制协议,支持连接Kestrel和TokyoTyrant等Memcached协议兼容的系统并作特殊处理。
支持动态添加和删除Memcached节点。
支持客户端统计。
支持JMX监控和统计,可以通过JMX增删节点。
高性能。
支持节点的权重设置。
支持nio的连接池,在高负载环境下提高吞吐量。
正因为Kestrel采用的协议是Memcached的文本协议,所以XMemcached支持了Kestrel!
推荐:
初识Kestrel
Xmemcached的FAQ和性能调整建议
------------- killme2008(XMemcached作者)
XMemcached与Spring集成
目录结构Kestrel |-main |-resources |-applicationContext.xml |-kestrel.properties |-kestrel.xml |-test |-java |-包名 |-KestrelTest.java
pom文件中加入XMemcached依赖
<dependency> <groupId>com.googlecode.xmemcached</groupId> <artifactId>xmemcached</artifactId> <version>1.3.7</version> <type>jar</type> <scope>compile</scope> </dependency>
kestrel.propertis
#\u8fde\u63a5\u6c60\u5927\u5c0f\u5373\u5ba2\u6237\u7aef\u4e2a\u6570 kestrel.connectionPoolSize=50 kestrel.failureMode=true #server1 #kestrel.server1.host=192.168.56.101 kestrel.server1.host=172.16.128.248 kestrel.server1.port=22133 kestrel.server1.weight=1 #server2 #kestrel.server2.host=10.11.155.41 #kestrel.server2.port=22133 #kestrel.server2.weight=1
多个server配置只需打开server2,以此类推。
Spring配置
kestrel.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- http://code.google.com/p/xmemcached/wiki/Spring_Integration --> <bean id="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder" p:connectionPoolSize="${kestrel.connectionPoolSize}" p:failureMode="${kestrel.failureMode}"> <!-- XMemcachedClientBuilder have two arguments.First is server list,and second is weights array. --> <constructor-arg> <list> <bean class="java.net.InetSocketAddress"> <constructor-arg> <value>${kestrel.server1.host}</value> </constructor-arg> <constructor-arg> <value>${kestrel.server1.port}</value> </constructor-arg> </bean> <!-- <bean class="java.net.InetSocketAddress"> --> <!-- <constructor-arg> --> <!-- <value>${kestrel.server2.host}</value> --> <!-- </constructor-arg> --> <!-- <constructor-arg> --> <!-- <value>${kestrel.server2.port}</value> --> <!-- </constructor-arg> --> <!-- </bean> --> </list> </constructor-arg> <constructor-arg> <list> <value>${kestrel.server1.weight}</value> <!-- <value>${kestrel.server2.weight}</value> --> </list> </constructor-arg> <property name="commandFactory"> <bean class="net.rubyeye.xmemcached.command.KestrelCommandFactory" /> </property> <property name="sessionLocator"> <bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator" /> </property> <property name="transcoder"> <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" /> </property> </bean> <!-- Use factory bean to build memcached client --> <bean id="memcachedClient" factory-bean="memcachedClientBuilder" factory-method="build" destroy-method="shutdown"> <!-- 如果收发双方使用Client不同,开启该选项 --> <!-- <property --> <!-- name="primitiveAsString" --> <!-- value="true" /> --> </bean> </beans>
注:这里要使用KestrelCommandFactory
<property name="commandFactory"> <bean class="net.rubyeye.xmemcached.command.KestrelCommandFactory" /> </property>
KestrelCommandFactory会在数据头加一个4字节的flag,支持存储任意可序列化类型。如果收发双方Client不同,为确保移植性,需要将数据转为String格式,舍弃这个flag。方式是开启如下选项,缺点是开启之后,数据就不能支持序列化操作,仅支持String类型。
<bean id="memcachedClient" factory-bean="memcachedClientBuilder" factory-method="build" destroy-method="shutdown"> <!-- 如果收发双方使用Client不同,开启该选项 --> <property name="primitiveAsString" value="true" /> </bean>
相关文章推荐
- 【迁移2015-09-15 13:38】Kestrel(三)
- 【迁移2015-09-07 14:22】Kestrel(一)
- Virtualbox虚拟机迁移遇到的一点问题。
- 数据库迁移导致sql 执行计划改变
- ASP.NET Core Kestrel 中使用 HTTPS (SSL)
- MySQL与Oracle的数据迁移注意事项,另附转换工具链接
- 创建数据库迁移
- TCP状态迁移
- Ruby on Rails,rake工具使用和数据库migrations迁移的概念
- 从Wordpress迁移到Jekyll
- Linux系统如何迁移至LVM磁盘
- 用perl做数据库迁移,从MSSQL到MYSQL(三)--V1.1版~多线程+handlerSocket
- 用Kettle的一套流程完成对整个数据库迁移 费元星
- 网站云服务器迁移时遇到的坑
- 企业是否应该进行Java EE 7迁移?
- windows 用户用户组迁移
- javascript --- 将共享属性迁移到原型中去
- AIX 系统迁移安装
- 【IMPDP】实现不同用户之间的数据迁移——REMAP_SCHEMA参数
- Hbase版本升级之数据迁移方案汇总