Memcached 노트 - (2) Xmemcached & Spring 통합
11802 단어 자바memcachedxmemcached
관련 링크: Memcached 노트 - (1) 설치 & 일반적인 오류 & Memcached 노트 모니터링 - (2) Xmemcached & Spring 통합 Memcached 노트 - (3) Memcached 사용 총화 Memcached 노트 - (4) 높 은 병발 공격 에 대응
1. Memcached 클 라 이언 트 개요
Memcached Client 는 현재 3 가지 가 있 습 니 다.
이 세 가지 클 라 이언 트 는 줄곧 각종 논쟁 이 존재 해 왔 다.
데이터 로 말 하고 공식 성능 대 비 를 참고 합 니 다.
Memcached Client for Java: https://github.com/gwhalin/Memcached-Java-Client/wiki/PERFORMANCE
XMemcached: http://xmemcached.googlecode.com/svn/trunk/benchmark/benchmark.html
2. Xmemcached 특성
Xmemcached 특성:
이 밖 에 Xmemcached 는 Spring 과 통합 되 기 쉽다.그리고 중국 오리지널!
3. Xmemcached 간단 한 실현
MemcachedClient Builder 는 MemcachedClient 의 핵심 인터페이스 로 Client 의 구축 (build () 방법) 과 닫 기 (shutdown () 방법 을 제어 합 니 다.
Xmemcached Client Builder 는 일반적으로 주소 목록 을 구조 적 으로 설정 합 니 다. 보통 가중치 도 설정 해 야 합 니 다. 코드 는 다음 과 같 습 니 다.
public XMemcachedClientBuilder(List<InetSocketAddress> addressList) {
if (addressList != null) {
for (InetSocketAddress addr : addressList) {
this.addressMap.put(addr, null);
}
}
}
public XMemcachedClientBuilder(List<InetSocketAddress> addressList,
int[] weights) {
if (addressList != null) {
for (InetSocketAddress addr : addressList) {
this.addressMap.put(addr, null);
}
}
this.weights = weights;
}
하지만 이 친구 가 this () 를 사용 하면 코드 를 아 낄 수 있 고 주석 도 달 아 주세요!
연결 풀 크기 를 설정 하고 바 이 너 리 프로 토 콜 / 텍스트 프로 토 콜 등 을 사용 해 야 합 니 다.
build () 방법 으로 획득
MemcachedClient
그리고 Memcached 를 통 해 set, get, replace, delete 등 Memcached 작업 을 할 수 있 습 니 다!
상위 코드:
import static junit.framework.Assert.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
import net.rubyeye.xmemcached.MemcachedClient;
import net.rubyeye.xmemcached.MemcachedClientBuilder;
import net.rubyeye.xmemcached.XMemcachedClientBuilder;
import net.rubyeye.xmemcached.command.BinaryCommandFactory;
import net.rubyeye.xmemcached.exception.MemcachedException;
import net.rubyeye.xmemcached.utils.AddrUtil;
import org.junit.Test;
public class MemcachedClientTest {
@Test
public void test() {
MemcachedClientBuilder builder = new XMemcachedClientBuilder(
AddrUtil.getAddresses("10.11.155.26:11211 10.11.155.41:11211 10.10.76.31:11211 10.10.76.35:11211"),
new int[] { 1, 1, 1, 1 });
// ,
builder.setConnectionPoolSize(50);
//
builder.setFailureMode(true);
//
builder.setCommandFactory(new BinaryCommandFactory());
MemcachedClient memcachedClient = null;
try {
memcachedClient = builder.build();
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();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (memcachedClient != null) {
try {
memcachedClient.shutdown();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
4. Xmemcached 와 Spring 통합
Xmemcached 와 Spring 통합 참고 가능http://code.google.com/p/xmemcached/wiki/Spring_Integration, 여 기 는 가장 자주 사용 하 는 방법 만 말 합 니 다.
memcached. properties 기본 설정:
#
memcached.connectionPoolSize=50
memcached.failureMode=true
#server1
memcached.server1.host=10.11.155.26
memcached.server1.port=11211
memcached.server1.weight=4
#server2
memcached.server2.host=10.11.155.41
memcached.server2.port=11211
memcached.server2.weight=3
#server3
memcached.server3.host=10.10.76.31
memcached.server3.port=11211
memcached.server3.weight=2
#server4
memcached.server4.host=10.10.76.35
memcached.server4.port=11211
memcached.server4.weight=1
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 -->
<context:property-placeholder location="memcached.properties" />
<bean
id="memcachedClientBuilder"
class="net.rubyeye.xmemcached.XMemcachedClientBuilder"
p:connectionPoolSize="${memcached.connectionPoolSize}"
p:failureMode="${memcached.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>${memcached.server1.host}</value>
</constructor-arg>
<constructor-arg>
<value>${memcached.server1.port}</value>
</constructor-arg>
</bean>
<bean class="java.net.InetSocketAddress">
<constructor-arg>
<value>${memcached.server2.host}</value>
</constructor-arg>
<constructor-arg>
<value>${memcached.server2.port}</value>
</constructor-arg>
</bean>
<bean class="java.net.InetSocketAddress">
<constructor-arg>
<value>${memcached.server3.host}</value>
</constructor-arg>
<constructor-arg>
<value>${memcached.server3.port}</value>
</constructor-arg>
</bean>
<bean class="java.net.InetSocketAddress">
<constructor-arg>
<value>${memcached.server4.host}</value>
</constructor-arg>
<constructor-arg>
<value>${memcached.server4.port}</value>
</constructor-arg>
</bean>
</list>
</constructor-arg>
<constructor-arg>
<list>
<value>${memcached.server1.weight}</value>
<value>${memcached.server2.weight}</value>
<value>${memcached.server3.weight}</value>
<value>${memcached.server4.weight}</value>
</list>
</constructor-arg>
<property name="commandFactory">
<bean class="net.rubyeye.xmemcached.command.TextCommandFactory" />
</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" />
</beans>
여기
memcachedClient Builder 노드 완료
Memcached Client Builder, 그리고 통과
memcachedClient 노드 설정
factory - method, 호출
MemcachedClient Builder 의 build () 방법 생 성
MemcachedClient, 설정
destroy - method 를 닫 습 니 다.
그러나 나 는 여전히 이곳 의 이상 을 누가 처리 해 야 할 지 의문 이다.Spring 용기 요?아니면 다른 대리 빈 이 포장 해 주 실 래 요?
Spring 용기 지원 이 있 습 니 다. 코드 에 설정 할 필요 도 없고 build () 와 shutdown () 방법 을 중복 호출 할 필요 도 없습니다. 이 작업 은 Spring 에 맡 길 수 있 습 니 다.
코드 는 다음 과 같 습 니 다:
import static junit.framework.Assert.*;
import java.util.concurrent.TimeoutException;
import net.rubyeye.xmemcached.MemcachedClient;
import net.rubyeye.xmemcached.exception.MemcachedException;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MemcachedSpringTest {
private ApplicationContext app;
private MemcachedClient memcachedClient;
@Before
public void init() {
app = new ClassPathXmlApplicationContext("applicationContext.xml");
memcachedClient = (MemcachedClient) app.getBean("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 노트 - (1) 설치 & 일반적인 오류 & Memcached 노트 모니터링 - (2) Xmemcached & Spring 통합 Memcached 노트 - (3) Memcached 사용 총화 Memcached 노트 - (4) 높 은 병발 공격 에 대응
XMemcached User Guide
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.