您好,欢迎来到图艺博知识网。
搜索
您的当前位置:首页springboot中集成memcached

springboot中集成memcached

来源:图艺博知识网

前言

Memcached 是一个高性能的分布式内存对象缓存系统,其存储性能在某些方面不比redis差,甚至在文本类型数据的存储上性能略优于redis,本文将介绍如何在springboot中集成memcached

 

准备工作

首先我们需要一款客户端连接对象,类似于我们在使用redis时使用的jedis , 目前memcached主流的客户端是Xmemcached,如果使用的是maven构建项目,则引入对应的依赖

   <!--引入memcached-->
        <dependency>
            <groupId>com.googlecode.xmemcached</groupId>
            <artifactId>xmemcached</artifactId>
            <version>2.4.5</version>
        </dependency>

配置

memcached在yml(properties)文件的相关配置

# memcached配置
memcached:
  server: 1.1.1.1:3333 2.2.2.2:4444 #memcached服务器集群(格式为host:port,多个服务器之间用空格隔开)
  opTimeout: 3000 #接口操作的默认超时时间,可以被接口覆盖
  poolSize: 10 #池子大小
  failureMode: false #是否开启失败模式,默认为false
  enabled: true # 是否使用memcached缓存

将memcached的配置由bean来管理,方便我们调用

 1 package com.me.config.properties;
 2 
 3 import org.springframework.boot.context.properties.ConfigurationProperties;
 4 import org.springframework.stereotype.Component;
 5 
 6 /**
 7  * @author : wang zns
 8  * @date : 2018-12-19
 9  */
10 @Component
11 @ConfigurationProperties(prefix = "memcached")
12 public class MemcachedProperties {
13 
14     /**
15      * 服务器
16      */
17     private String server;
18 
19     /**
20      * 操作超时时间,可以被API覆盖
21      */
22     private Integer opTimeout;
23     /**
24      * 连接池大小
25      */
26     private Integer poolSize;
27 
28     /**
29      * 是否开启失败模式
30      */
31     private boolean failureMode;
32 
33     /**
34      * 是否使用memcached缓存
35      */
36     private boolean enabled;
37 
38 
39 
40     public String getServer() {
41         return server;
42     }
43 
44     public void setServer(String server) {
45         this.server = server;
46     }
47 
48     public Integer getOpTimeout() {
49         return opTimeout;
50     }
51 
52     public void setOpTimeout(Integer opTimeout) {
53         this.opTimeout = opTimeout;
     }
55 
56     public Integer getPoolSize() {
57         return poolSize;
58     }
59 
60     public void setPoolSize(Integer poolSize) {
61         this.poolSize = poolSize;
62     }
63 
     public boolean isFailureMode() {
65         return failureMode;
66     }
67 
68     public void setFailureMode(boolean failureMode) {
69         this.failureMode = failureMode;
70     }
71 
72     public boolean isEnabled() {
73         return enabled;
74     }
75 
76     public void setEnabled(boolean enabled) {
77         this.enabled = enabled;
78     }
79 }

 

memcached配置类(创建memcached客户端对象,并注入spring容器中)

 1 package com.me.config;
 2 
 3 import cn.stylefeng.guns.config.properties.MemcachedProperties;
 4 import lombok.extern.slf4j.Slf4j;
 5 import net.rubyeye.xmemcached.MemcachedClient;
 6 import net.rubyeye.xmemcached.MemcachedClientBuilder;
 7 import net.rubyeye.xmemcached.XMemcachedClientBuilder;
 8 import net.rubyeye.xmemcached.command.BinaryCommandFactory;
 9 import net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator;
10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.beans.factory.annotation.Qualifier;
12 import org.springframework.context.annotation.Bean;
13 import org.springframework.context.annotation.Configuration;
14 
15 /**
16  * @author : wang zns
17  * @date : 2018-12-19
18  */
19 @Configuration
20 @Slf4j
21 public class MemcachedConfig {
22 
23     @Autowired
24     private MemcachedProperties memcachedProperties;
25 
26 
27 
28     @Bean(name = "memcachedClientBuilder")
29     public MemcachedClientBuilder getBuilder() {
30         MemcachedClientBuilder memcachedClientBuilder = new XMemcachedClientBuilder(memcachedProperties.getServer());
31 
32         // 内部采用一致性哈希算法
33         memcachedClientBuilder.setSessionLocator(new KetamaMemcachedSessionLocator());
34         // 操作的超时时间
35         memcachedClientBuilder.setOpTimeout(memcachedProperties.getOpTimeout());
36         // 采用二进制传输协议(默认为文本协议)
37         memcachedClientBuilder.setCommandFactory(new BinaryCommandFactory());
38         // 设置连接池的大小
39         memcachedClientBuilder.setConnectionPoolSize(memcachedProperties.getPoolSize());
40         // 是否开起失败模式
41         memcachedClientBuilder.setFailureMode(memcachedProperties.isFailureMode());
42         return memcachedClientBuilder;
43     }
44 
45     /**
46      * 由Builder创建memcachedClient对象,并注入spring容器中
47      * @param memcachedClientBuilder
48      * @return
49      */
50     @Bean(name = "memcachedClient")
51     public MemcachedClient getClient(@Qualifier("memcachedClientBuilder") MemcachedClientBuilder memcachedClientBuilder) {
52         MemcachedClient client = null;
53         try {
             client =  memcachedClientBuilder.build();
55         } catch(Exception e) {
56             log.info("exception happens when bulid memcached client{}",e.toString());
57         }
58        return client;
59     }
60 
61 
62 
63 }

 

使用

有了client对象之后,我们可以像直接操作服务端那样进行对应的操作,下面用一个小案例进行演示

service

serviceImpl

controller

运行结果:

 

提交之后,去缓存服务器上查看

 

 

至此,springboot中集成memcached就完成了

 

写在最后

 

springboot集成memcached非常简单,核心步骤就是添加依赖、创建client对象并注入spring容器、然后就是用client对象进行各种操作。

client的接口当然有非常多,xmemcached对接口进行了封装。

 

转载于:https://www.cnblogs.com/devise/p/10146917.html

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuoyibo.net 版权所有 湘ICP备2023021910号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务