本文主要实现spring boot集成XMemcached这种方式(持续更新,有人维护),推荐使用
第一步:windows下安装Memcached
在网上查了大量的参考资料,发现有很多种实现方式,我们在第一种,首先在https://www.runoob.com/memcached/window-install-memcached.html里面下载相应的版本,我一开始现在的是64位的1.4.5版本,然后按照教程里面的安装手册安装,我发现并没有安装成功,查询了大量的资料,找了各种原因(telnet 127.0.0.1 11211测试等等),都没有找到相应的解决办法,所以我就放弃了1.4.5版本,转而安装1.4.4版本,可以发布成server的版本。
具体如何安装以及修改参数都在上面的网页教程里面有相应的记录,这里我需要说明的是:当执行c:\memcached\memcached.exe -d start之后,这个memcached进行就会启动,关机重启电脑也会自动启动这个进程。不用再刻意的去配置开机启动。
首先确保这个服务开启了,才能在后续代码里面使用memcached服务。
第二步:在代码中添加maven依赖
com.googlecode.xmemcachedxmemcached2.4.5
第三步:在application.properties中配置memcache相关配置信息
memcached.server=127.0.0.1:11211 10.86.54122:11211 #memcached服务器集群(格式为host:port,多个服务器之间用空格隔开)
memcached.opTimeout=3000 #接口操作的默认超时时间,可以被接口覆盖
memcached.poolSize=10 #池子大小
memcached.failureMode=false #是否开启失败模式,默认为false
memcached.enabled=true 是否使用memcached缓存
第四步:编写XMemcacheConfig配置类
@Configuration
public class XMemcacheConfig {@Value("${memcached.server}")private String server;@Value("${memcached.opTimeout}")private Integer opTimeout;@Value("${memcached.poolSize}")private Integer poolSize;@Value("${memcached.failureMode}")private boolean failureMode;@Value("${memcached.enabled}")private boolean enabled;@Bean(name = "memcachedClientBuilder")public MemcachedClientBuilder getBuilder() {MemcachedClientBuilder memcachedClientBuilder = new XMemcachedClientBuilder(server);// 内部采用一致性哈希算法memcachedClientBuilder.setSessionLocator(new KetamaMemcachedSessionLocator());// 操作的超时时间memcachedClientBuilder.setOpTimeout(opTimeout);// 采用二进制传输协议(默认为文本协议)memcachedClientBuilder.setCommandFactory(new BinaryCommandFactory());// 设置连接池的大小memcachedClientBuilder.setConnectionPoolSize(poolSize);// 是否开起失败模式memcachedClientBuilder.setFailureMode(failureMode);return memcachedClientBuilder;}/*** 由Builder创建memcachedClient对象,并注入spring容器中* @param memcachedClientBuilder* @return*/@Bean(name = "memcachedClient")public MemcachedClient getClient(@Qualifier("memcachedClientBuilder") MemcachedClientBuilder memcachedClientBuilder) {MemcachedClient client = null;try {client = memcachedClientBuilder.build();} catch(Exception e) {e.printStackTrace();}return client;}
}
第五步:编写测试memcache的controller类
@RestController
public class XMemcacheController {@Autowiredprivate MemcachedClient memcachedClient;@RequestMapping("/XMemcacheIndex")public String XMemcacheIndex() throws InterruptedException {try {//新增操作memcachedClient.set("XMemcacheKeyOne",0,"张三");System.out.println((String)memcachedClient.get("XMemcacheKeyOne"));//删除操作memcachedClient.delete("XMemcacheKeyOne");System.out.println((String)memcachedClient.get("XMemcacheKeyOne"));//设置存活时间memcachedClient.set("XMemcacheKeyTwo",1,"李四");Thread.sleep(2000);System.out.println((String)memcachedClient.get("XMemcacheKeyTwo"));//更新操作memcachedClient.set("XMemcacheKeyThree",0,"王五");System.out.println((String)memcachedClient.get("XMemcacheKeyThree"));memcachedClient.set("XMemcacheKeyThree",0,"王五他儿子");System.out.println((String)memcachedClient.get("XMemcacheKeyThree")); } catch (Exception e) {e.printStackTrace();}return "xMemcacheIndex";}
}
第六步:测试
启动程序,输入http://localhost:8080/XMemcacheIndex,输出结果如图所示: