Memcached —— 下载、 配置、使用

主要了解Memcached 与其其中一个java客户端XMemcached。


一、基础了解

Memcahed 是一套分布式高速缓存系统。简言之,它是用于缓存数据的服务。在并发访问web服务器时,为减少直接访问数据库的次数,降低数据库服务器的负载,首次从数据库查询某数据后,我们将其放入缓存系统中,在一定时间内对该相同数据的再次访问,便可直接从缓存系统中拿取,而无需操作数据库。

缓存系统由两部分组成:

1、服务端,即Memcached,使用c语言编写;

2、客户端,即我们编程时所使用的一套用于缓存数据的一套API。Memcached 的java客户端有3种版本:

(1)、memcached client for Java:https://github.com/gwhalin/Memcached-Java-Client/downloads

(2)、spymemcached;

(3)、xmemcached。

360百科:https://baike.so.com/doc/5380534-5616808.html



二、Memcached下载

官网:http://memcached.org/

Memcached服务端下载地址:https://github.com/memcached/memcached/releases

说明:此链接下载的为源代码,可编译为.exe文件后再安装为服务,或从其它站点下载可执行文件。


附一个不错的链接:

XMemcached 中文用户指南:https://github.com/killme2008/xmemcached/wiki/Xmemcached%20%E4%B8%AD%E6%96%87%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97#spring-30%E5%92%8Cbuilder%E9%85%8D%E7%BD%AE



三、配置

1、安装Memcache 服务端。

下载memcached.exe后,cmd进入其所在目录,将其安装为系统服务:memcached.exe -d install

2、项目中使用XMemcached 进行数据缓存。

方式一:与Spring 整合使用

(1)、导入xmemcached-2.*.jar与其依赖包slf4j-*.jar;

(2)、spring容器中配置上下文对象:

(一)通过XMemcachedClientFactoryBean类配置:

(简单配置)

<bean name="memcachedClient"
                class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean" destroy-method="shutdown">
	<property name="servers">
		<value>host1:port host2:port2</value>
        </property>
</bean>
(详细配置)

<bean name="server1" class="java.net.InetSocketAddress">
		<constructor-arg>
			<value>host1</value>
		</constructor-arg>
		<constructor-arg>
			<value>port1</value>
		</constructor-arg>
</bean>
<bean name="memcachedClient"
                class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean" destroy-method="shutdown">
	<property name="servers">
        	<value>host1:port,host2:port host3:port,host4:port</value>
        </property>
        <!-- server's  -->
        <property name="weights">
        	<list>
                	<value>1</value>
                	<value>2</value>
                	<value>3</value>
                </list>
        </property>
        <!-- AuthInfo map,only valid on 1.2.5 or later version -->
	<property name="authInfoMap">
		<map>
			<entry key-ref="server1">
				<bean class="net.rubyeye.xmemcached.auth.AuthInfo" factory-method="typical">
					<constructor-arg index="0">
						<value>cacheuser</value>
					</constructor-arg>
					<constructor-arg index="1">
						<value>123456</value>
					</constructor-arg>
				</bean>
			</entry>
		</map>
	</property>
        <!-- nio connection pool size -->
        <property name="connectionPoolSize" value="2"></property>
        <!-- Use binary protocol,default is TextCommandFactory -->
        <property name="commandFactory">
        	<bean class="net.rubyeye.xmemcached.command.BinaryCommandFactory"></bean>
        </property>
        <!-- Distributed strategy -->
        <property name="sessionLocator">
                <bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"></bean>
        </property>
        <!-- Serializing transcoder -->
        <property name="transcoder">
                <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" />
        </property>
        <!-- ByteBuffer allocator -->
        <property name="bufferAllocator">
                <bean class="net.rubyeye.xmemcached.buffer.SimpleBufferAllocator"></bean>
        </property>
        <!-- Failure mode -->
        <property name="failureMode" value="false"/>
 </bean>
属性说明:

servers:memcached服务器节点列表;

weights与servers对应的节点的权重,权重大小控制缓存对象的多少;

authInfoMap 授权验证信息,仅在xmemcached 1.2.5及以上版本有效;

connectionPoolSize :nio连接池大小,默认为1

commandFactory:协议工厂,net.rubyeye.xmemcached.command.BinaryCommandFactory,TextCommandFactory(默认),KestrelCommandFactory;

sessionLocator:分布策略,一致性哈希net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator或者ArraySessionLocator(默认)

transcoder:序列化转换器,默认使用net.rubyeye.xmemcached.transcoders.SerializingTranscoder,更多选项参见javadoc;

bufferAllocator :IoBuffer分配器,默认为net.rubyeye.xmemcached.buffer.SimpleBufferAllocator,可选CachedBufferAllocator(不推荐);

failureMode:是否启用failure模式,true为启用,默认不启用。


(二)在Spring3.0中通过Builder配置

Spring 3.0修改了查找destroy method的方式,所以上述配置将出错,可采用下面配置。

<bean name="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder">
                <!-- XMemcachedClientBuilder have two arguments.First is server list,and second is weights array. -->
                <constructor-arg>
                        <list>
                                <bean class="java.net.InetSocketAddress">
                                        <constructor-arg>
                                                <value>localhost</value>
                                        </constructor-arg>
                                        <constructor-arg>
                                                <value>12000</value>
                                        </constructor-arg>
                                </bean>
                                <bean class="java.net.InetSocketAddress">
                                        <constructor-arg>
                                                <value>localhost</value>
                                        </constructor-arg>
                                        <constructor-arg>
                                                <value>12001</value>
                                        </constructor-arg>
                                </bean>
                        </list>
                </constructor-arg>
                <constructor-arg>
                        <list>
                                <value>1</value>
                                <value>2</value>
                        </list>
                </constructor-arg>
                <property name="authInfoMap">
			<map>
				<entry key-ref="server1">
					<bean class="net.rubyeye.xmemcached.auth.AuthInfo"
						factory-method="typical">
						<constructor-arg index="0">
							<value>cacheuser</value>
						</constructor-arg>
						<constructor-arg index="1">
							<value>123456</value>
						</constructor-arg>
					</bean>
				</entry>
			</map>
		</property>
                <property name="connectionPoolSize" value="2"></property>
                <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>
        <!-- Use factory bean to build memcached client -->
        <bean name="memcachedClient3" factory-bean="memcachedClientBuilder"
                factory-method="build" destroy-method="shutdown"/>

authInfoMap保存的是以memcached服务器地址为键的键值对,暂时对其作用不太了解,此属性可不用配置。

最终,可通过自动装配使用XMemcached进行数据缓存:

@Autowired
private MemcachedClient memcachedClient3;

……
	//存数据
	String data = ……//首次查数据库
	String key = "key";
	if(memcachedClient3.get(key)==null){
		memcachedClient3.add(key,10000,data);//参数列表为键、缓存时间、缓存数据
	}
	//查数据
	String data = memcachedClient3.get("key");
	if(data!=null){
		return data;
	}else{
		//查数据库
	}
……


方式二:项目中直接使用

假设memcached 服务安装在本地(其默认端口为11211),则示例代码:

    MemcachedClientBuilder builder = new XMemcachedClientBuilder(
					AddrUtil.getAddresses("localhost:11211"));
    MemcachedClient memcachedClient = builder.build();
    try {
		memcachedClient.set("hello", 0, "Hello,xmemcached");
		String value = memcachedClient.get("hello");
		System.out.println("hello=" + value);
		memcachedClient.delete("hello");
		value = memcachedClient.get("hello");
		System.out.println("hello=" + value);
    } catch (MemcachedException e) {
		System.err.println("MemcachedClient operation fail");
		e.printStackTrace();
    } catch (TimeoutException e) {
		System.err.println("MemcachedClient operation timeout");
		e.printStackTrace();
    } catch (InterruptedException e) {
		// ignore
    }
    try {
              //close memcached client
      		memcachedClient.shutdown();
    } catch (IOException e) {
        	System.err.println("Shutdown MemcachedClient fail");
		e.printStackTrace();
    }


XMemcached详细了解:
https://github.com/killme2008/xmemcached/wiki/Xmemcached%20%E4%B8%AD%E6%96%87%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97











  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值