目录
(一) 集成前配置
引入依赖
<!--memcache-->
<!-- https://mvnrepository.com/artifact/com.googlecode.xmemcached/xmemcached -->
<dependency>
<groupId>com.googlecode.xmemcached</groupId>
<artifactId>xmemcached</artifactId>
<version>2.4.5</version>
</dependency>
配置application.yml
spring:
memcache:
# 服务地址
servers: 127.0.0.1:11211
# 连接数量
poolSize: 10
# 操作超时时长
opTimeout: 5000
sanitizeKeys: false # 是否启用url encode机制
自定义properties类
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* XMemcached
* 为了缩短篇幅 , 笔者删减了getter 和 setter
* @author HUANG
*/
@Component
// 用于读取配置文件
@ConfigurationProperties(prefix = "spring.memcache")
public class IMemcachedProperties {
/**
* memcached服务地址
*/
private String servers;
/**
* nio连接池的数量
*/
private Integer poolSize;
/**
* 设置默认操作超时
*/
private Long opTimeout;
/**
* 是否启用url encode机制
*/
private Boolean sanitizeKeys;
}
自定义Memcached连接配置类
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.impl.KetamaMemcachedSessionLocator;
import net.rubyeye.xmemcached.utils.AddrUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
/**
* Memcached 配置
*/
@Configuration
public class IMemcachedConfig {
/**
* 日志
*/
private static Logger logger = LoggerFactory.getLogger(IMemcachedConfig.class);
@Autowired
private IMemcachedProperties iMemcachedProperties;
@Bean
public MemcachedClient getMemcachedClinet() {
MemcachedClient memcachedClient = null;
try {
// 获取连接
MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(iMemcachedProperties.getServers()));
// 从1.3版本开始,xmemcached支持failure模式。所谓failure模式是指,当一个memcached节点down掉的时候,发往这个节点的请求将直接失败,而不是发送给下一个有效的memcached节点 , 默认不启用failure模式
builder.setFailureMode(false);
builder.setSanitizeKeys(iMemcachedProperties.getSanitizeKeys());
// 启用连接池 , 设置nio连接池连接数量, Xmemcached是基于java nio的client实现,默认对一个memcached节点只有一个连接,这在通常情况下已经有非常优异的表现。但是在典型的高并发环境下,nio的单连接也会遇到性能瓶颈。因此XMemcached支持设置nio的连接池,允许建立多个连接到同一个memcached节点,但是请注意,这些连接之间是不同步的,因此你的应用需要自己保证数据更新的同步,
builder.setConnectionPoolSize(iMemcachedProperties.getPoolSize());
// 设置操作超时时长
builder.setOpTimeout(iMemcachedProperties.getOpTimeout());
// 设置连接时长
builder.setConnectTimeout(3000);
// 设置数据一致性hash算法
builder.setSessionLocator(new KetamaMemcachedSessionLocator());
// 启用二进制协议 Memcached 1.4开始正式启用二进制协议,xmemcached 1.2开始支持二进制协议
builder.setCommandFactory(new BinaryComma