您的位置:首页 > 数据库 > Memcache

【迁移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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息