zoukankan      html  css  js  c++  java
  • springboot 整合 memcached

    前言

    Memcached 是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)的一个高性能的分布式内存对象缓存系统,其存储性能在某些方面不比redis差,甚至在文本类型数据的存储上性能略优于redis,本文将介绍如何在springboot中集成memcached。

    准备工作

    Windows 下安装 Memcached

    1、解压下载的安装包到指定目录。

    2、在 memcached1.4.5 版本之后,memcached 不能作为服务来运行,需要使用任务计划中来开启一个普通的进程,在 window 启动时设置 memcached自动执行。

    我们使用管理员身份执行以下命令将 memcached 添加来任务计划表中:

    schtasks /create /sc onstart /tn memcached /tr "'c:memcachedmemcached.exe' -m 512"

    注意:你需要使用真实的路径替代 c:memcachedmemcached.exe。

    注意:-m 512 意思是设置 memcached 最大的缓存配置为512M。

    注意:我们可以通过使用 "c:memcachedmemcached.exe -h" 命令查看更多的参数配置。

    3、如果需要删除 memcached 的任务计划可以执行以下命令:

    schtasks /delete /tn memcached

    java 客户端操作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来管理

    package com.me.config.properties;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    /**
     * @author : wang zns
     * @date : 2018-12-19
     */
    @Data @Component @ConfigurationProperties(prefix = "memcached") public class MemcachedProperties { /** * 服务器 */ private String server; /** * 操作超时时间,可以被API覆盖 */ private Integer opTimeout; /** * 连接池大小 */ private Integer poolSize; /** * 是否开启失败模式 */ private boolean failureMode; /** * 是否使用memcached缓存 */ private boolean enabled; }

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

    package com.me.config;
    
    import cn.stylefeng.guns.config.properties.MemcachedProperties;
    import lombok.extern.slf4j.Slf4j;
    import net.rubyeye.xmemcached.MemcachedClient;
    import net.rubyeye.xmemcached.MemcachedClientBuilder;
    import net.rubyeye.xmemcached.XMemcachedClientBuilder;
    import net.rubyeye.xmemcached.command.BinaryCommandFactory;
    import net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * @author : wang zns
     * @date : 2018-12-19
     */
    @Configuration
    @Slf4j
    public class MemcachedConfig {
    
        @Autowired
        private MemcachedProperties memcachedProperties;
    
        @Bean(name = "memcachedClientBuilder")
        public MemcachedClientBuilder getBuilder() {
            MemcachedClientBuilder memcachedClientBuilder = new XMemcachedClientBuilder(memcachedProperties.getServer());
    
            // 内部采用一致性哈希算法
            memcachedClientBuilder.setSessionLocator(new KetamaMemcachedSessionLocator());
            // 操作的超时时间
            memcachedClientBuilder.setOpTimeout(memcachedProperties.getOpTimeout());
            // 采用二进制传输协议(默认为文本协议)
            memcachedClientBuilder.setCommandFactory(new BinaryCommandFactory());
            // 设置连接池的大小
            memcachedClientBuilder.setConnectionPoolSize(memcachedProperties.getPoolSize());
            // 是否开起失败模式
            memcachedClientBuilder.setFailureMode(memcachedProperties.isFailureMode());
            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) {
                log.info("exception happens when bulid memcached client{}",e.toString());
            }
           return client;
        }
    
    }
    

      

    博客园:https://www.cnblogs.com/xianquan
    Copyright ©2020 l-coil
    【转载文章务必保留出处和署名,谢谢!】
查看全文
  • 相关阅读:
    高阶类型的特征是包含类型构造器、包含类型参量
    类型系统的分类
    类型转化与类型变换
    类型导出模式-类型封装模式-命名空间模式
    xcode 通配搜索
    Swift 命名空间形式扩展的实现
    Swift3命名空间的实现
    函数式编程:上线文、包裹、容器-我们可以将一个值用Context(上下文)包裹起来
    swift 使用计算属性+结构管理内存
    Locations for Public Frameworks
  • 原文地址:https://www.cnblogs.com/xianquan/p/13696360.html
  • Copyright © 2011-2022 走看看