springboot jedis配置以及集群(第四篇) 实现redis单机和集群_jedispool 集群配置_弘宇的IT屋的博客-程序员秘密

技术标签: FAQ  springboot  redis  

第一篇 redis以及redis集群原理及简介

第二篇 ubuntu16设置redis主从备份

第三篇 ubuntu16设置redis集群

第四篇 实现redis单机和集群

第五篇 redis-cli集群操作说明

 

 

 

1. 引入pom

<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>3.3.0</version>
</dependency>

2. 实现自动配置导入

2.1 定义yml内容

redis:
    cluster:
        nodes: 192.168.1.47:8082,192.168.1.47:8083,192.168.1.47:8084,192.168.1.47:8085,192.168.1.47:8086,192.168.1.47:8087
        node: 192.168.1.21
        port: 6379
        password: tina1002
        timeout: 2000
        database: 1
        maxIdle: 10
        minIdle: 10
        maxTotal: 20
        maxAttempts: 5

2.2 定义导入类

@Data
public class RedisConfig {

    //node address
    private Set<String> nodes;

    private String node;

    //port for redis
    private  Integer  port;

    //password for redis
    private  String  password;

    private  Integer  timeout;

    private  Integer  database;

    private  Integer  maxIdle;

    private  Integer  minIdle;

    private  Integer  maxTotal;

    private  Integer  maxAttempts;

}

2.3 定义属性类

@Data
@ConfigurationProperties(prefix = "redis.cluster")
public class RedisConfigProperty {

    //node address
    private Set<String> nodes;

    private String node;

    //port for redis
    private  Integer  port;

    //password for redis
    private  String  password;

    private  Integer  timeout;

    private  Integer  database;

    private  Integer  maxIdle;

    private  Integer  minIdle;

    private  Integer  maxTotal;

    private  Integer  maxAttempts;

}

2.4 自动导入设置

@Configuration
@EnableConfigurationProperties(RedisConfigProperty.class)
@ConditionalOnClass(RedisConfig.class)
@ConditionalOnProperty(prefix = "redis.cluster", value = "", matchIfMissing = true)
public class RedisAutoConfig {

    @Autowired
    private RedisConfigProperty redisConfigProperty;

    @Bean
    public RedisConfig redisConfig(){
        RedisConfig redisConfig = new RedisConfig();
        redisConfig.setNodes(redisConfigProperty.getNodes());
        redisConfig.setNode(redisConfigProperty.getNode());
        redisConfig.setPort(redisConfigProperty.getPort());
        redisConfig.setPassword(redisConfigProperty.getPassword());
        redisConfig.setDatabase(redisConfigProperty.getDatabase());
        redisConfig.setTimeout(redisConfigProperty.getTimeout());
        redisConfig.setMaxTotal(redisConfigProperty.getMaxTotal());
        redisConfig.setMinIdle(redisConfigProperty.getMinIdle());
        redisConfig.setMaxIdle(redisConfigProperty.getMaxIdle());
        redisConfig.setMaxAttempts(redisConfigProperty.getMaxAttempts());
        return redisConfig;
    }

2.5 实现单机和集群代码

@Configuration
public class RedisServer {

    @Autowired
    private RedisConfig redisConfig;

    @Bean
    public JedisCluster redisCluster() {

        if (CollectionUtils.isEmpty(redisConfig.getNodes())) {
            throw new RuntimeException();
        }

        // 设置redis集群的节点信息
        Set<HostAndPort> nodes = redisConfig.getNodes().stream().map(node -> {
            String[] nodeInfo = node.split(":");
            if (nodeInfo.length == 2) {
                return new HostAndPort(nodeInfo[0], Integer.parseInt(nodeInfo[1]));
            } else {
                return new HostAndPort(nodeInfo[0], 6379);
            }
        }).collect(Collectors.toSet());

        // 配置连接池
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(redisConfig.getMaxTotal());
        jedisPoolConfig.setMaxIdle(redisConfig.getMaxIdle());
        jedisPoolConfig.setMinIdle(redisConfig.getMinIdle());

        // 创建jediscluster,传入节点列表和连接池配置
        //JedisCluster cluster = new JedisCluster(nodes, jedisPoolConfig);
        JedisCluster cluster = new JedisCluster(nodes,redisConfig.getTimeout(),redisConfig.getTimeout()
                ,redisConfig.getMaxAttempts(),redisConfig.getPassword(),jedisPoolConfig);

        System.out.println("cluster=="+cluster);
        return cluster;
    }

    @Bean
    public Jedis jedis() {
        // 配置连接池
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(redisConfig.getMaxTotal());
        jedisPoolConfig.setMaxIdle(redisConfig.getMaxIdle());
        jedisPoolConfig.setMinIdle(redisConfig.getMinIdle());

        JedisPool pool = new JedisPool(jedisPoolConfig, redisConfig.getNode(), redisConfig.getPort(),
                redisConfig.getTimeout(), redisConfig.getPassword(), redisConfig.getDatabase());

        System.out.println("pool=="+pool.getResource());
        return pool.getResource();
    }


}

2.6  测试功能

    @Test
    public void test() {
        System.out.println("redisConfig=="+redisConfig);
        jedis.set("jedis","1222");

        String j =  jedis.get("jedis");

        System.out.println("jedis==="+j);

        jedisCluster.set("jedisCluster","121312");

        String jc =  jedisCluster.get("jedisCluster");

        System.out.println("jedisCluster=="+jc);

    }

测试结果

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ccr1001ccr1001/article/details/107645556

智能推荐

分布式训练的GPU设置与分配(含源码可以直接测试)_gpu集群训练模型_ERROR_LESS的博客-程序员秘密

:输出日志信息,包含任务的布置情况 :自动指定设备布置任务 :设置可见设备,例如机器上有4个GPU,但设置只对一个GPU可见,则该进程无法访问其他设备 :获取所有物理设备(整块) :建立逻辑分区 :获取所有逻辑设备(分块) :设置内存自增长,需在程序开始的时候就被设置因此,本机有两块物理GPU先做一个默认gpu设置的实验,作为对照组。基础代码:容器内进行训练:默认情况下,此demo每步运行花费6ms。查看GPU占用情况:发现仅仅这一个进程就几乎占满GPU,对资源浪费十分严重。因此,进行

JavaScript—call, apply, bind 函数(20)_weixin_34037173的博客-程序员秘密

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

智能服务器虚拟化,详解四大服务器虚拟化架构_约会师老马的博客-程序员秘密

在本指南中,你将了解到服务器虚拟化、操作系统虚拟化、主机式虚拟化(hosted virtualization)和裸机虚拟化(bare-metal virtualization)的一些细节和它们的差异。还可以了解一下叫做混合虚拟化(Hybrid Virtualization)的新型虚拟技术,以及Microsoft的2008计划如何影响虚拟领域。VMware发布ESX已 经有七年了,虽然VMwar...

openCV (七) 直方图和傅里叶变换 学习回顾记录_cv2图像频谱图_深度菜鸡-达闻西的博客-程序员秘密

文章目录一、直方图(1) 图像均衡化二、傅里叶变换(1)低通滤波(2)高通滤波一、直方图语法:cv2.calcHist(images,channels,mask,histSize,ranges)- images:原图像格式为uint8或float32,当传入函数时需要用[]括起来使用;- channels: 同样用中括号括起来,告诉程序统计图像的直方图。如果是灰度图,就为[0],如果是彩色图像,传入参数为[0][1],[2]对应着BGR- mask:掩模图像。如果要统计整幅图想的直方图,为Non

2023跨境出海:奥地利电商市场现状及发展前景_wmdage的博客-程序员秘密

提起奥地利,很多人的第一印象就是维也纳的金色大厅、莫扎特,还有阿尔卑斯山的壮丽美景。其实奥地利的电商市场一样很美丽,是欧洲新增的一片蓝海市场。这也使得不少跨境卖家争先进行布局,那奥地利的市场潜力究竟怎么样呢?本文Nox聚星就和大家好好聊一聊。

随便推点

layui的分页功能_layui分页_tyy17214的博客-程序员秘密

1.首先在layui中布局好数据表格创建一个table实例最简单的方式是,在页面放置一个元素 ,然后通过 table.render() 方法指定该容器,如下所示:1.&lt;link rel="stylesheet" href="/layui/css/layui.css" media="all"&gt;2.&lt;table id="demo" lay-filter="test"&gt;&lt;/table&gt;3.&lt;script src="/layui/layui.js"&gt;&lt;

echarts地图和闪点结合_echarts地图闪点_dongxiexie的博客-程序员秘密

&amp;lt;%@ taglib prefix=&quot;c&quot; uri=&quot;http://java.sun.com/jsp/jstl/core&quot;%&amp;gt;&amp;lt;% String path = request.getContextPath(); String basePath = request.getScheme() + &quot;://&quot; + request.getServerName() + &quot;:&quot; + re...

LeetCode——第461题:汉明距离_RBreeze的博客-程序员秘密

题目:两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y &amp;lt; 231.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。...

wget使用proxy的配置_ckykdwr884269的博客-程序员秘密

在~/.wgetrc中设定代理http_proxy = http://ip_or_domainname:80/ftp_proxy = http://ip_or_domainname:80/use_proxy...

linux tar permission,ubuntu下操作目录,出现Permission denied的解决办法_西红柿气象台的博客-程序员秘密

今天从一个目录下拷贝一份文件到另外一个目录下时:[email protected]:~$cp jdk-7u79-linux-x64.tar /usr/lib/jvm出现如下提示:Permission denied一、表面上看是因为权限不足,因此可以通过对usr文件夹进行授权的方式解决:[email protected]:~$sudo chmod -R 777 usr其中-R 是指级联应用到目录里的所有...

基于AVR单片机的AT24C01-512eeprom读写程序_ba_wang_mao的博客-程序员秘密

针对AT24Cxx系列eeprom存储器,写的时候有越页功能,不用考虑页边界,I2C用软件模拟实现,完善中…#define SDA1() PORTC|=1&lt; #define SDA0() PORTC&amp;=~(1&lt; #define SDAout() DDRC|=1&lt; #define SDAin() DDRC&amp;=~(1&lt; #define RSDA() PINC&amp;(1&lt; #define SCL1() PORTC|=1&lt; #define S

推荐文章

热门文章

相关标签