SpringBoot整合Memcached缓存

文章介绍了如何在SpringBoot项目中集成xmemcached来操作缓存,包括添加依赖、配置memcached服务、创建配置类、使用MemcachedClient对象存储和获取验证码,以及通过配置属性动态加载memcached服务器信息。
摘要由CSDN通过智能技术生成

步骤①:导入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;
    }
}

步骤③:使用xmemcached客户端操作缓存,注入MemcachedClient对象

/**这段代码是一个实现了SMSCodeService接口的服务类。
* 通过这段代码,我们可以看到该服务类依赖于CodeUtils和MemcachedClient对象,用于生成验证码和存储/获取验证码。
* 它提供了发送验证码和验证验证码的功能。*/

/*@Service: 这个注解表示这是一个服务类,用于处理业务逻辑。*/
@Service
public class SMSCodeServiceImpl implements SMSCodeService {

    /*@Autowired: 这个注解用于自动注入依赖的CodeUtils和MemcachedClient对象*/
    @Autowired
    private CodeUtils codeUtils;
    @Autowired
    private MemcachedClient memcachedClient;
/*sendCodeToSMS(String tele): 这个方法用于发送验证码到手机号。
它首先使用codeUtils对象生成一个验证码,然后使用memcachedClient对象将验证码存储到缓存中,有效期为10秒,并返回生成的验证码。*/
    @Override
    public String sendCodeToSMS(String tele) {
        String code = codeUtils.generator(tele);
        try {
            memcachedClient.set(tele,10,code);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return code;
    }

    /*checkCode(SMSCode smsCode): 这个方法用于验证用户输入的验证码是否正确。
    它首先通过memcachedClient对象从缓存中获取之前存储的验证码,然后将用户输入的验证码与从缓存中获取的验证码进行比较,
    如果相等则返回true,否则返回false。*/
    @Override
    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);
    }

}

SMSCodeServiceImpl实现的接口

public interface SMSCodeService {
    public String sendCodeToSMS(String tele);
    public boolean checkCode(SMSCode smsCode);
}

定义配置属性

​ 以下过程采用前期学习的属性配置方式进行,当前操作有助于理解原理篇中的很多知识。

  • 定义配置类,加载必要的配置属性,读取配置文件中memcached节点信息
/*这段代码是一个XMemcached的配置属性类。
通过这个类,我们可以在配置文件中配置XMemcached的服务器地址、连接池大小和操作超时时间,
并通过@Autowired注解自动注入到需要使用这些属性的类中。*/

/*@Component: 这个注解表示这是一个Spring组件,会被自动扫描并注册为一个bean*/
@Component
/*@ConfigurationProperties(prefix = "memcached"): 这个注解表示这个类的属性值会从配置文件中读取,其中prefix指定了属性的前缀。*/
@ConfigurationProperties(prefix = "memcached")
/*@Data: 这个注解是Lombok提供的注解,用于自动生成getter、setter、toString等方法。*/
@Data
/*这个类有三个属性:
servers: 用于配置XMemcached服务器的地址。
poolSize: 用于配置连接池的大小。
opTimeout: 用于配置操作的超时时间。*/
public class XMemcachedProperties {
    private String servers;
    private int poolSize;
    private long opTimeout;
}

- 定义memcached节点信息

  yaml格式
  memcached:
    servers: localhost:11211
    poolSize: 10
    opTimeout: 3000

- 在memcached配置类中加载信息

/*这段代码是一个Spring配置类,用于配置XMemcached的客户端
* 通过这段代码,我们可以获取到一个已经配置好的MemcachedClient对象,用于与XMemcached服务器进行通信。*/
@Configuration
public class XMemcachedConfig {
   /*@Autowired: 这个注解用于自动注入依赖的XMemcachedProperties对象。*/
    @Autowired
    private XMemcachedProperties memcachedProperties;

    @Bean
    /*/*getMemcachedClient(): 这个方法返回一个MemcachedClient对象。*/
    public MemcachedClient getMemcachedClient() throws IOException {
        /*MemcachedClientBuilder: 这个类是XMemcached提供的用于构建MemcachedClient对象的构建器。
        * XMemcachedClientBuilder: 这个类继承自MemcachedClientBuilder,用于构建XMemcachedClient对象。
        * memcachedProperties.getServers(): 这个方法获取配置的服务器地址。*/
        MemcachedClientBuilder memcachedClientBuilder = new XMemcachedClientBuilder(memcachedProperties.getServers());
        /*memcachedClientBuilder.setConnectionPoolSize(): 这个方法设置连接池的大小。*/
        memcachedClientBuilder.setConnectionPoolSize(memcachedProperties.getPoolSize());
        /*memcachedClientBuilder.setOpTimeout(): 这个方法设置操作超时时间。*/
        memcachedClientBuilder.setOpTimeout(memcachedProperties.getOpTimeout());
        /*memcachedClientBuilder.build(): 这个方法用于构建MemcachedClient对象。*/
        MemcachedClient memcachedClient = memcachedClientBuilder.build();
        /*return memcachedClient;: 这个语句返回创建的MemcachedClient对象。*/
        return memcachedClient;
    }
}

总结**

  1. memcached安装后需要启动对应服务才可以对外提供缓存功能,安装memcached服务需要基于windows系统管理员权限(这个去网上找教程吧
  2. 由于springboot没有提供对memcached的缓存整合方案,需要采用手工编码的形式创建xmemcached客户端操作缓存
  3. 导入xmemcached坐标后,创建memcached配置类,注册MemcachedClient对应的bean,用于操作缓存
  4. 初始化MemcachedClient对象所需要使用的属性可以通过自定义配置属性类的形式加载
spring+xmemcached aop切面 需要xmemcached-1.2.5+spring-2.5.6 <bean name="factoryMemcachedClient" class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean" destroy-method="shutdown"> <property name="servers"> <value>${XMemcached_servers}</value> </property> <!-- server's weights --> <property name="weights"> <list> <value>1</value> <value>2</value> <value>3</value> </list> </property> <!-- nio connection pool size --> <property name="connectionPoolSize" value="${XMemcached_connectionPoolSize}"></property> <!-- Use binary protocol,default is TextCommandFactory, BinaryCommandFactory KestrelCommandFactory --> <property name="commandFactory"> <bean class="net.rubyeye.xmemcached.command.BinaryCommandFactory"></bean> </property> <!-- Distributed strategy KetamaMemcachedSessionLocator--> <property name="sessionLocator"> <bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"></bean> </property> <!-- Serializing transcoder --> <property name="transcoder"> <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" /> </property> <!-- ByteBuffer allocator --> <property name="bufferAllocator"> <bean class="net.rubyeye.xmemcached.buffer.SimpleBufferAllocator"></bean> </property> </bean> <bean id="cachingClient" class="com.dmx.cache.caching.impl.CachingXMemcachedClient" init-method="init" destroy-method="destroy"> <property name="memcachedClient" ref="factoryMemcachedClient" /> <property name="isflushAll" value="${XMemcached_isflushAll}" /> </bean> <bean id="cachingManager" class="com.dmx.cache.caching.impl.CachingManagerImpl"> <property name="cachingClient" ref="cachingClient" /> </bean> <bean id="cacheBeforeAdvice" class="com.dmx.cache.interceptor.advice.CacheBeforeAdvice"></bean> <bean id="cacheAfterAdvice" class="com.dmx.cache.interceptor.advice.CacheAfterAdvice"></bean> <bean id="cacheInterceptor" class="com.dmx.cache.interceptor.CacheInterceptor"> <property name="cachingManager" ref="cachingManager" /> <property name="cacheAttributes"> <props> <prop key="save*">update</prop> <prop key="remove*">update</prop> <prop key="add*">update</prop> <prop key="del*">update</prop> <prop key="get*">readOnly</prop> <prop key="getPlaybill">readOnly=10</prop> </props> </property> </bean> <bean id="cacheProxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="interceptorNames"> <list> <value>cacheBeforeAdvice</value> <value>cacheAfterAdvice</value> <value>cacheInterceptor</value> </list> </property> </bean> <bean id="demoDao" parent="cacheProxyFactoryBean"> <property name="target" ref="demoDaotarget" /> </bean>
您好!要将MemcachedSpring Boot集成,您可以遵循以下步骤: 1. 添加依赖:在您的Spring Boot项目的pom.xml文件中,添加以下依赖项来引入Memcached客户端库: ```xml <dependency> <groupId>com.google.code.simple-spring-memcached</groupId> <artifactId>spring-cache</artifactId> <version>3.6.1</version> </dependency> ``` 2. 配置Memcached连接:在application.properties或application.yml文件中,添加Memcached服务器的连接配置,例如: ```properties spring.cache.type=simple spring.cache.simple.cache-names=myCache spring.cache.simple.servers=localhost:11211 ``` 3. 创建缓存配置类:创建一个用于配置缓存的类,例如: ```java @Configuration @EnableCaching public class CacheConfig extends CachingConfigurerSupport { @Bean @Override public CacheManager cacheManager() { SimpleCacheManager cacheManager = new SimpleCacheManager(); cacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("myCache"))); return cacheManager; } } ``` 4. 在需要缓存的方法上添加缓存注解:在您的服务类中,选择要进行缓存的方法,并使用`@Cacheable`注解来标记它们。例如: ```java @Service public class MyService { @Cacheable("myCache") public String getDataFromCache(String key) { // 从数据库或其他地方获取数据的逻辑 return result; } } ``` 现在,当调用`getDataFromCache`方法时,它将首先检查缓存中是否存在具有给定键的数据。如果存在,它将返回缓存的数据,而不执行实际的方法体。如果缓存中不存在该数据,则方法体将被执行,并将结果放入缓存供以后使用。 这样,您就成功地将MemcachedSpring Boot集成了。希望对您有所帮助!如有任何问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值