Memcached基本介绍
memcached是一套分布式的快取系统,与redis相似,当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用。这是一套开放源代码软件,以BSD license授权协议发布。它通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用速度,提高扩展性。Memcached的API使用32位元的循环冗杂校验计算键值后,将资料分散在不同机器上。当表格慢了以后,接下来新增的资料会以LRU机制替换掉。Memcached基于一个存储键值对的hashmap,其守护线程是用C语言写的,但是客户端可以用任何语言来编写,并通过Memcached协议与守护线程通信
Memcached安装
64位系统 1.4.4版本:
1、解压下载的安装包到指定目录。
2、在 1.4.5 版本以前 memcached 可以作为一个服务安装,使用管理员权限运行以下命令:
c:\memcached\memcached.exe -d install
注意:你需要使用真实的路径替代 c:\memcached\memcached.exe。
3、然后我们可以使用以下命令来启动和关闭 memcached 服务:
c:\memcached\memcached.exe -d start c:\memcached\memcached.exe -d stop
springboot技术整合
memcached未被springboot收录为缓存解决方案
memcached目前提供有三种客户端技术,分别是Memcached Client for Java、SpyMemcached和Xmemcached,其中性能指标各方面最好的客户端是Xmemcached,本次采用的也是Xmemcached
步骤①:导入xmemcached的坐标
<dependency> <groupId>com.googlecode.xmemcached</groupId> <artifactId>xmemcached</artifactId> <version>2.4.7</version> </dependency>
步骤②:配置memcached,制作memcached的配置类
@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对象
@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节点信息
@Component @ConfigurationProperties(prefix = "memcached") @Data public class XMemcachedProperties { private String servers; private int poolSize; private long opTimeout; }
定义memcached节点信息
memcached: servers: localhost:11211 poolSize: 10 opTimeout: 3000
在memcached配置类中加载信息
@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对象所需要使用的属性可以通过自定义配置属性类的形式加载