SpringBoot 整合Memcached

简介

Memcached 是一个高性能的分布式内存对象的key-value缓存系统,用于动态Web应用以减轻数据库负载,现在也有很多人将它作为内存式数据库在使用,memcached通过它的自定义协议与客户端交互,而XMemcached就是它的一个java客户端实现。
官网:->直达

添加依赖

<dependency>
   <groupId>com.googlecode.xmemcached</groupId>
   <artifactId>xmemcached</artifactId>
   <version>2.4.7</version>
</dependency>

配置

属性配置

spring:
  memcached:
    # memcached服务器节点
    servers: 127.0.0.1:11211
    # nio连接池的数量
    poolSize: 10
    # 设置默认操作超时
    opTimeout: 3000
    # 是否启用url encode机制
    sanitizeKeys: false

属性类设置

新建一个XMemcachedProperties的配置类,该配置类用来映射读取application.yml文件中关于memcached的配置项。

@ConfigurationProperties(prefix = "spring.memcached")
@PropertySource("classpath:application.yml")
@Configuration
@Data
public class XMemcachedProperties {

    /**
     * memcached服务器节点
     */
    private String servers;

    /**
     * nio 连接池的数量
     */
    private Integer poolSize;

    /**
     * 设置默认操作超时
     */
    private Long opTimeout;

    /**
     * 是否启用url encode 机制
     */
    private Boolean sanitizeKeys;

}

配置类设置

新建一个配置类MemcachedConfig,该配置类是为了将MemcachedClient注入到Spring容器,方便我们后续使用自动注入的方式使用MemcachedClient。如下:

@Configuration
public class MemcachedConfig {

    @Autowired
    private XMemcachedProperties xMemcachedProperties;

    @Bean
    public MemcachedClient memcachedClient(){
        MemcachedClient memcachedClient = null;
        try {
            MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(xMemcachedProperties.getServers()));
            builder.setFailureMode(false);
            builder.setSanitizeKeys(xMemcachedProperties.getSanitizeKeys());
            builder.setConnectionPoolSize(xMemcachedProperties.getPoolSize());
            builder.setOpTimeout(xMemcachedProperties.getOpTimeout());
            builder.setSessionLocator(new KetamaMemcachedSessionLocator());
            builder.setCommandFactory(new BinaryCommandFactory());
            memcachedClient = builder.build();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return memcachedClient;
    }
}

使用案例

添加缓存

@SpringBootTest
public class MemcachedTest {
  
    @Autowired
    private MemcachedClient memcachedClient;
  
    @Test
    void Test() throws InterruptedException, TimeoutException, MemcachedException {
        // 设置缓存,永不过期
        memcachedClient.set("a", 0, 1);
      
      	// 设置缓存,10秒过期
        memcachedClient.set("b", 10, "Test123");
    }
}

更新缓存过期时间

@SpringBootTest
public class MemcachedTest {

    @Autowired
    private MemcachedClient memcachedClient;
  
  
    @Test
    void touchTest() throws InterruptedException, TimeoutException, MemcachedException {
        // 延缓缓存过期时间20秒
        memcachedClient.touch("a", 20);
    }
}

删除缓存

@SpringBootTest
public class MemcachedTest {

    @Autowired
    private MemcachedClient memcachedClient;
  
    @Test
    void deleteTest() throws InterruptedException, TimeoutException, MemcachedException {
        memcachedClient.delete("a");
    }
}

获取缓存

@SpringBootTest
public class MemcachedTest {

    @Autowired
    private MemcachedClient memcachedClient;

    @Test
    void getTest() throws InterruptedException, TimeoutException, MemcachedException {
        String a = memcachedClient.get("a");
    }
}

原创文章,作者:jiafegn,如若转载,请注明出处:https://www.techlearn.cn/archives/515

Previous 2023年4月23日
Next 2023年4月29日

相关推荐

  • SpringBoot 打包

    SpringBoot 项目部署到服务器常见的方式就是,打包成 jar 包,通过 nohup java -jar 命令去运行项目,这也是官方推荐的一种方式。 导入依赖 打包 设置打包…

    springboot 2023年4月5日
    148
  • SpringBoot拦截器

    简介 拦截器可以根据 URL 对请求进行拦截,主要应用于登陆校验、权限验证、乱码解决、性能监控和异常处理等功能。 使用步骤 在SpringBoot中使用拦截器功能通常需要以下3步:…

    springboot 2023年4月29日
    123
  • SpringBoot 整合Mybatis

    简介 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBat…

    2024年8月28日
    308
  • SpringBoot CRUD基础开发 入门

    需求简介 环境准备 1、新建项目 新建一个crud的项目,如下: 2、新建数据库脚本 新建curd数据库 初始化数据库 引入依赖 1、引入web依赖 2、引入Lombok依赖 3、…

    2023年3月26日
    178
  • SpringBoot 过滤器

    简介 SpringBoot过滤器在web开发中可以过滤指定的URL,比如拦截掉不需要的接口请求,同时也可以对request和response的内容进行修改。 使用场景 Spring…

    springboot 2023年4月30日
    240
  • Springboot 注解 @ConfigurationProperties

    作用 @ConfigurationProperties注解主要作用就是将prefix属性指定的前缀配置项的值绑定到这个Bean上,默认情况下需要和@Component或者@Conf…

    springboot 2022年9月2日
    181
  • SpringBoot 整合SpringSecurity认证

    简介 Spring Security 是Spring家族中的一个安全管理框架。相比与另外一个安全框架shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。 —般Web应用的…

    2023年12月31日
    424
  • SpringBoot 整合 Lombok

    简介 Lombok其实和Spring Boot关系不太大,只是这个工具太好用了,这里也整理记录一下。 Lombok是一个Java库可以与Java IDE(ItelliJ IDEA、…

    2024年8月28日
    261
  • SpringBoot 整合Log4j2日志框架

    简介 Apache Log4j 2是日志框架Log4j的升级,它比其前身Log4j 1.x提供了重要的改进, 并且参考了Logback中许多有用的改进,同时修复了Logback的一…

    springboot 2023年3月26日
    153
  • springboot 注解 @ComponentScan

    作用 @ComponentScan用于批量注册bean,这个注解会让spring去扫描某些包及其子包中所有的类,然后将满足一定条件的类作为bean 注册到spring容器中。主要使…

    springboot 2022年11月8日
    218