发表于: 2017-10-25 23:35:54
1 773
今天完成的事
学习xmemcached,据说是中国原创的Spring与memcached整合,、
XMemcached特性:
- 高性能
- 支持完整的memcached文本协议,二进制协议。
- 支持JMX,可以通过MBean调整性能参数、动态添加/移除server、查看统计等。
- 支持客户端统计
- 支持memcached节点的动态增减。
- 支持memcached分布:余数分布和一致性哈希分布。
- 更多的性能调整选项。
- 此外,XMemcached更容易与Spring集成
JAVA与Memcache结合有三种方式,还是很有争议的
- Memcached Client for Java 比 SpyMemcached更稳定、更早、更广泛;
- SpyMemcached 比 Memcached Client for Java更高效;
- XMemcached 比 SpyMemcache并发效果更好。
接下来配置XMemcache
重写了一个配置文件
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 引入配置文件 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<!--<property name="location" value="classpath:jdbc.properties" />-->
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
<value>classpath:memcached.properties</value>
</list>
</property>
</bean>
<!--配置XMemcached-->
<bean id="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder">
<property name="connectionPoolSize" value="${memcached.connectionPoolSize}"/>
<!--配置连接池-->
<constructor-arg>
<list>
<bean name="server1" class="java.net.InetSocketAddress">
<constructor-arg value="${server1.memcached.host}"/>
<constructor-arg value="${server1.memcached.port}"/>
</bean>
<!--<bean name="server2" class="java.net.InetSocketAddress">-->
<!--<constructor-arg value="${server2.memcached.host}"/>-->
<!--<constructor-arg value="${server2.memcached.port}"/>-->
<!--</bean>-->
</list>
</constructor-arg>
<constructor-arg>
<list>
<value>${server1.memcached.weight}</value>
<!--<value>${server2.memcached.weight}</value>-->
</list>
</constructor-arg>
<!--支持二进制文件-->
<property name="commandFactory">
<bean class="net.rubyeye.xmemcached.command.BinaryCommandFactory"/>
</property>
<!--分布策略-->
<property name="sessionLocator">
<!--默认是采用余数哈希,这里改成一致性哈希-->
<bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"/>
</property>
<!--序列化转换器-->
<property name="transcoder">
<bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder"/>
</property>
</bean>
<bean name="memcachedClient" factory-method="build" factory-bean="memcachedClientBuilder" destroy-method="shutdown"/>
<!-- 关系型数据库+Memcached——结束 -->
</beans>
这次占位符能用了,应该就是版本的问题
发现xmcached可以加权 不过应该不是独有的功能
memcached.connectionPoolSize=1
memcached.failureMode=false
#server1
server1.memcached.host=127.0.0.1
server1.memcached.port=11211
server1.memcached.weight=1
测试类
public class xmecachedTest {
@Autowired
private MemcachedClient memcachedClient;
@Test
public void test() {
try {
// 设置/获取
memcachedClient.set("zlex", 36000, "set/get");
assertEquals("set/get", memcachedClient.get("zlex"));
// 替换
memcachedClient.replace("zlex", 36000, "replace");
assertEquals("replace", memcachedClient.get("zlex"));
// 移除
memcachedClient.delete("zlex");
assertNull(memcachedClient.get("zlex"));
} catch (TimeoutException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MemcachedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
为了了解memcached的工作原理,还跑去敲了命令
就不贴图了,只说一下遇到的问题,在telnet敲memcache命令,value的长度一定要跟实际长度对应,不然就出错,问了师兄,以后要存字符串长度会有封装好的类为我设定长度,所以不用担心需要另计算字符串的字节长度
还有memcache工具类,就不贴了,我也是用别人的,放上链接
http://blog.csdn.net/Heng_Ji/article/details/29825383
遇到的问题:在添加配置文件的时候web.xml默认的路径是默认webapp下,而测试类中@Runwith注解是默认resourse下,一时间竟不知道怎么解决
师兄给我一种方案:在Sring-mvc.xml中配置该文件的路径,默认resource,
还有一种方案:在配置文件路径前加classpath:因为 classpath= resourse
明天的计划:代码中添加xmemcache,学习序列化和反序列化,准备小课
收获:初步了解xmemcache 以及memcached增删改查命令, classpath=/ resourse ,memcached工具类
任务进度:任务6步骤2
任务开始时间:2017-10-21
预计demo时间:2017-10-26
是否有延期风险:暂无
禅道:http://task.ptteng.com/zentao/project-task-276.html
评论