zoukankan      html  css  js  c++  java
  • 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的服务端上。

  • 相关阅读:
    ASP.NET 表单验证 Part.1(理解表单验证)
    Silverlight 简介 Part.3(设计 Siverlight 页面)
    ASP.NET 成员资格 Part.3(LoginStatus、LoginView、PasswordRecovery)
    ASP.NET 网站部署 Part.1(安装IIS、复制文件部署网站)
    ASP.NET Dynamic Data Part.1(创建动态数据应用程序)
    ASP.NET 安全模型 Part.2(SSL)
    ASP.NET MVC Part.2(扩展基本的 MVC 应用程序)
    ASP.NET 网站部署 Part.2(使用 Web 部署)
    开发高级 Web 部件
    创建 Web 部件(WebPart 类、简单的 Web 部件)
  • 原文地址:https://www.cnblogs.com/chenzheng8975/p/9428551.html
Copyright © 2011-2022 走看看