Xmemcached学习笔记二(简单使用)
首先说一下XMemcached我们简单使用时主要是做了什么事情:
当我们使用XMemcached的时候主要是用了XMemcachedClient的对象来进行插入,查找和删除缓存数据。
但是我们不采用XMemcachedClient memcachedclient=new XMemcachedClient();的方式来获取XMemcachedClient对象。
为什么呢,因为XMemcachedClient这个类里面并没有任何的参数设置,如设置分布策略,服务地址等,都没有,没有这些我们最起码的插入时选择服务节点都不能,
它相当于一个客户端,提供了插入,查找和删除缓存数据方法,让我们可以操作底层服务一样的。所以涉及到另一个类XMemcachedClientBuilder,
它来管理我们java程序所输入的对应参数来生成XMemcachedClient对象,然后就可以使用该对象正常访问我们的缓存了。
所以,如果我们写一个简单的测试类就可以:
如果是结合spring框架来使用的话,也是主要管理XMemcachedClientBuilder的bean,配置起来就是:
<bean id="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder"> <constructor-arg> <list>
<!--服务节点地址和端口--> <bean class="java.net.InetSocketAddress"> <constructor-arg> <value>127.0.0.1</value> </constructor-arg> <constructor-arg> <value>11211</value> </constructor-arg> </bean>
<bean class="java.net.InetSocketAddress">
<constructor-arg>
<value>127.0.0.1</value>
</constructor-arg>
<constructor-arg>
<value>11210</value>
</constructor-arg>
</bean> </list> </constructor-arg>
<!--权重--> <constructor-arg> <list> <value>2</value>
<value>1</value> </list> </constructor-arg>
<!--最大连接个数--> <property name="connectionPoolSize" value="20" />
<!--协议,有二进制,和文本、还有一个不知道是啥,下面的是文本--> <property name="commandFactory"> <bean class="net.rubyeye.xmemcached.command.TextCommandFactory"></bean> </property>
<!--分布策略,默认的是余数哈希,下面的为一致性哈希(常用)--> <property name="sessionLocator"> <bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"></bean> </property>
<!--设置序列化方式--> <property name="transcoder"> <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" /> </property> </bean>
<!--定义memcachedClient,通过memcachedClientBuilder的build方法-->
<bean id="memcachedClient" factory-bean="memcachedClientBuilder" factory-method="build" destroy-method="shutdown" />
基本上就是这些常用参数,参数的含义基本已经注明,但是具体有些参数是干什么用的,不同设置有什么区别呢:
首先,权重,权重和上服务节点是一一对应的。权重设置的越大,则负载越大,具体是什么情况呢,在底层是通过对应权重复制其对应的节点,什么意思,就是像我上面设置的,第一个节点权重为2,第二个为1,
就相当于我又三个服务节点,然后每次存储的时候呢,从这三个里面选择一个,那其实有两个都是我们实际上的第一个服务节点,所以其存储的概率是不是更大?所以说权重越大,负载越大。
分布策略是什么?就是我们存储的时候,具体放在哪个节点,就有一个分布的问题,分布策略干的事情就是帮我们确定你存储的键值具体是放在哪一个服务节点上。