• Xmemcached集群与SpringBoot整合


    创建SpringBoot项目xmemcached_springboot,添加开发需要的包名和类名,项目的目录结构如下:

    添加XMemcached依赖:

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

    添加XMemcached相关配置到属性文件application.yml

    ###################  memcached配置  ###################
    memcached:
      servers: 192.168.84.128:2222 192.168.84.128:6666
      poolSize: 10
      sanitizeKeys: false
      openCache: true # true为启动缓存 false为标准实现

    编写读取上述属性的读取类:XMemcachedProperties.java

    package com.czhappy.xmemcached_springboot.properties;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    @Component
    @ConfigurationProperties(prefix = "memcached")
    public class XMemcachedProperties {
    
        private String servers;
        private int poolSize;
        private boolean sanitizeKeys;
        private boolean openCache;
    
        public boolean isOpenCache() {
            return openCache;
        }
    
        public void setOpenCache(boolean openCache) {
            this.openCache = openCache;
        }
    
        public String getServers() {
            return servers;
        }
    
        public void setServers(String servers) {
            this.servers = servers;
        }
    
        public int getPoolSize() {
            return poolSize;
        }
    
        public void setPoolSize(int poolSize) {
            this.poolSize = poolSize;
        }
    
        public boolean isSanitizeKeys() {
            return sanitizeKeys;
        }
    
        public void setSanitizeKeys(boolean sanitizeKeys) {
            this.sanitizeKeys = sanitizeKeys;
        }
    }

    编写XMemcachedConfig.java,构建builder和client

    package com.czhappy.xmemcached_springboot.config;
    
    import com.czhappy.xmemcached_springboot.properties.XMemcachedProperties;
    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.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class XMemcachedConfig {
    
        @Autowired
        private XMemcachedProperties xMemcachedProperties;
    
        // 构建builder
        @Bean
        public MemcachedClientBuilder getXMBuilder(){
            MemcachedClientBuilder memcachedClientBuilder = null;
            try{
                String servers = xMemcachedProperties.getServers();
                System.out.println("servers="+servers);
                memcachedClientBuilder = new XMemcachedClientBuilder(servers);
                // 开启/关闭failure模式
                memcachedClientBuilder.setFailureMode(false);
                memcachedClientBuilder.setSanitizeKeys(xMemcachedProperties.isSanitizeKeys());
                memcachedClientBuilder.setConnectionPoolSize(xMemcachedProperties.getPoolSize());
                memcachedClientBuilder.setCommandFactory(new BinaryCommandFactory());
                memcachedClientBuilder.setOpTimeout(3000);
                memcachedClientBuilder.setSessionLocator(new KetamaMemcachedSessionLocator());
    
                // 诸多XMemcached配置
                return memcachedClientBuilder;
            }catch(Exception e){
                e.printStackTrace();
            }
            return null;
        }
    
        // client
        @Bean
        public MemcachedClient getXMClient(MemcachedClientBuilder memcachedClientBuilder){
            MemcachedClient memcachedClient = null;
            try{
                memcachedClient = memcachedClientBuilder.build();
                return memcachedClient;
            }catch(Exception e){
                e.printStackTrace();
            }
            return null;
    
        }
    }

    编写ShowApi.java文件,此处仅实现新增和查询方法,其他方法可参考添加

    package com.czhappy.xmemcached_springboot.utils;
    
    import net.rubyeye.xmemcached.MemcachedClient;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class ShowApi {
    
        @Autowired
        private MemcachedClient memcachedClient;
    
        /**
         * 新增
         * @param key
         * @param value
         */
        public void showAdd(String key, String value){
            try {
                memcachedClient.set(key, 0, value);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
        public String showQuery(String key){
            try {
                return memcachedClient.get(key);
            }catch (Exception e){
                e.printStackTrace();
            }
            return "";
        }
    }

    编写测试类,添加数据并打印查询的结果:

    package com.czhappy.xmemcached_springboot;
    
    import com.czhappy.xmemcached_springboot.utils.ShowApi;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class XmemcachedSpringbootApplicationTests {
    
        @Autowired
        private ShowApi showApi;
    
        @Test
        public void contextLoads() {
    
            String key = "goods_name";
            String value = "apple";
            showApi.showAdd(key, value);
            System.out.println(showApi.showQuery(key));
    
        }
    
    }

    为了测试memcached集群和数据存储,我们分别启动端口为2222和6666的memcached服务端

    运行测试类,可以看到后台打印出存储的结果

    说明数据保存成功,我们也可以去服务端直接查询

    2222端口:

    6666端口:

    数据具体存储在哪个memcached上我们是无法预知的,它是由客户端XMemcached内部hash算法判断实现,此处我们可以知道数据是存储成功了,通过查询最终结果能知道存在端口为6666的服务端上。

  • 相关阅读:
    《mysql必知必会》学习_第23章_20180809
    禁止电脑自动乱装流氓软件
    网络地址转换技术NAT
    闲置手机作电脑无线音箱
    TransMac工具制作MacOS启动U盘
    制作MacOS启动U盘
    解决centos7启动后出现Warning: dracut-initqueue timeout‘ at startup进入emergency mode的问题
    思科 锐捷命令行简介
    VRRP 虚拟网关冗余协议
    STP 生成树协议
  • 原文地址:https://www.cnblogs.com/chenzheng8975/p/9428551.html
Copyright © 2020-2023  润新知