Memcached基本介绍
memcached是一套分布式的快取系统,与redis相似,当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用。这是一套开放源代码软件,以BSD license授权协议发布。它通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用速度,提高扩展性。Memcached的API使用32位元的循环冗杂校验计算键值后,将资料分散在不同机器上。当表格慢了以后,接下来新增的资料会以LRU机制替换掉。Memcached基于一个存储键值对的hashmap,其守护线程是用C语言写的,但是客户端可以用任何语言来编写,并通过Memcached协议与守护线程通信
Memcached安装
64位系统 1.4.4版本:
下载地址
http://static.runoob.com/download/memcached-win64-1.4.4-14.zip
1、解压下载的安装包到指定目录。
2、在 1.4.5 版本以前 memcached 可以作为一个服务安装,使用管理员权限运行以下命令:
代码语言:javascript复制c:memcachedmemcached.exe -d install
注意:你需要使用真实的路径替代 c:memcachedmemcached.exe。
3、然后我们可以使用以下命令来启动和关闭 memcached 服务:
代码语言:javascript复制c:memcachedmemcached.exe -d start
c:memcachedmemcached.exe -d stop
springboot技术整合
memcached未被springboot收录为缓存解决方案
memcached目前提供有三种客户端技术,分别是Memcached Client for Java、SpyMemcached和Xmemcached,其中性能指标各方面最好的客户端是Xmemcached,本次采用的也是Xmemcached
步骤①:导入xmemcached的坐标
代码语言:javascript复制<dependency>
<groupId>com.googlecode.xmemcached</groupId>
<artifactId>xmemcached</artifactId>
<version>2.4.7</version>
</dependency>
步骤②:配置memcached,制作memcached的配置类
代码语言:javascript复制@Configuration
public class XMemcachedConfig {
@Bean
public MemcachedClient getMemcachedClient() throws IOException {
MemcachedClientBuilder memcachedClientBuilder =
new XMemcachedClientBuilder("localhost:11211");
MemcachedClient memcachedClient = memcachedClientBuilder.build();
return memcachedClient;
}
}
memcached默认对外服务端口11211。
步骤③:使用xmemcached客户端操作缓存,注入MemcachedClient对象
代码语言:javascript复制@Service
public class SMSCodeServiceImpl implements SMSCodeService {
@Autowired
private CodeUtils codeUtils;
@Autowired
private MemcachedClient memcachedClient;
public String sendCodeToSMS(String tele) {
String code = codeUtils.generator(tele);
try {
// 设置缓存
memcachedClient.set(tele,10,code);
} catch (Exception e) {
e.printStackTrace();
}
return code;
}
public boolean checkCode(SMSCode smsCode) {
String code = null;
try {
//获取缓存
code = memcachedClient.get(smsCode.getTele()).toString();
} catch (Exception e) {
e.printStackTrace();
}
return smsCode.getCode().equals(code);
}
}
设置值到缓存中使用set操作,取值使用get操作
规范化定义配置属性
定义配置类,加载必要的配置属性,读取配置文件中memcached节点信息
代码语言:javascript复制@Component
@ConfigurationProperties(prefix = "memcached")
@Data
public class XMemcachedProperties {
private String servers;
private int poolSize;
private long opTimeout;
}
定义memcached节点信息
代码语言:javascript复制memcached:
servers: localhost:11211
poolSize: 10
opTimeout: 3000
在memcached配置类中加载信息
代码语言:javascript复制@Configuration
public class XMemcachedConfig {
@Autowired
private XMemcachedProperties props;
@Bean
public MemcachedClient getMemcachedClient() throws IOException {
MemcachedClientBuilder memcachedClientBuilder = new XMemcachedClientBuilder(props.getServers());
memcachedClientBuilder.setConnectionPoolSize(props.getPoolSize());
memcachedClientBuilder.setOpTimeout(props.getOpTimeout());
MemcachedClient memcachedClient = memcachedClientBuilder.build();
return memcachedClient;
}
}
导入xmemcached坐标后,创建memcached配置类,注册MemcachedClient对应的bean,用于操作缓存 初始化MemcachedClient对象所需要使用的属性可以通过自定义配置属性类的形式加载