springboot jedis配置以及集群(第四篇) 实现redis单机和集群_jedispoolconfig 集群-程序员宅基地

技术标签: 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

智能推荐

比较电路交换,报文交换和分组交换的主要优点和缺点(转)_电路交换,报文交换和分组交换的优缺点-程序员宅基地

文章浏览阅读8.1k次,点赞6次,收藏21次。电路交换优点:1.信息传输时延小2.信息以数字信号的形式在数据信道上进行“透明”传输,交换机对用户的数据信息不存储、处理,交换机在处理方面的开销比较小,对用户的数据信息不用附加控制信息,使信息的传送效率较高3.信息的编译吗和代码格式由通信双方决定,与交换网络无关。缺点:1.网络的利用率低2.线路的利用率低3.限不同速率、不同代码格式、不同控制方式的相互直通4.无呼损。报文交换:优点:1...._电路交换,报文交换和分组交换的优缺点

数据结构与算法(五)排序算法篇_数据结构输入5个数 排序后只有四个数-程序员宅基地

文章浏览阅读2.1k次,点赞11次,收藏47次。数据结构与算法的学习也接近尾声了,坚持就是胜利啊!一个数组中的数据原本是凌乱的,但是由于需要,我们需要使其有序排列,要实现对数组进行排序我们之前已经在中讲解过冒泡排序和快速排序(选学),而这一部分,我们将继续讲解更多种类型的排序算法。在开始之前,我们还是从冒泡排序开始回顾。_数据结构输入5个数 排序后只有四个数

NRF52832学习笔记(21)——系统延时使用-程序员宅基地

文章浏览阅读3.2k次,点赞4次,收藏3次。一、头文件需要包含头文件#include "nrf_delay.h"二、原函数/** * @brief Function for delaying execution for a number of microseconds. * * @param us_time Number of microseconds to wait. */#define nrf_delay_us(us_time) NRFX_DELAY_US(us_time)/** * @brief Function fo

vue获取dom元素高度的方法_vue获取dom的高度-程序员宅基地

文章浏览阅读3.3k次。本文转载自:https://www.cnblogs.com/lhl66/p/7908133.html 作者:lhl66 转载请注明该声明。获取高度: <div ref="自定义名称" ></div>要在钩子mounted里面dom结构生成后去获取dom的高度,宽度,修改样式等操作!!! mounted() { let h = window.innerH..._vue获取dom的高度

Linux(Ubuntu)安装字体_ubuntu 安装 arial字体-程序员宅基地

文章浏览阅读520次。安装字体如果是双系统的话可以直接用windows下的字体:将字体文件复制(移动)到/usr/share/fonts/下cp &amp;lt;path&amp;gt; /usr/share/fonts在终端依次执行如下命令:sudo mkfontscalesudo mkfontdirsudo fc-cache -fv新的字体安装完成微软雅黑不能商用哎!..._ubuntu 安装 arial字体

Python画图库matplotlib库的介绍-程序员宅基地

文章浏览阅读4.9k次,点赞3次,收藏5次。Python的matplotlib是一个很强大的画图库,用法也很简单,具体如下:# 基本操作import pandas as pdimport matplotlib.pyplot as pltdate = pd.read_csv('date.csv')date = date[0:12]plt.plot(date['key'], date['value']) # 第一个参数x轴数据..._python画图库

随便推点

删除DataTable中的某一行_datatable 删除特定行-程序员宅基地

文章浏览阅读3.5k次。在C#中,如果要删除DataTable中的某一行,大约有以下几种办法:1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(index);可以直接删除行2,datatable.Rows[i].Delete()。Delete()之后需要datatable.AccepteChanges()方法确认完全删除,因为Delete()..._datatable 删除特定行

内存优化_彦彬博客-程序员宅基地

文章浏览阅读1.5k次,点赞2次,收藏6次。内存泄漏内存管理内存模型 Android原生开发以java为主。在java中,Java内存模型,往往是指Java程序在运行时内存的模型,而Java代码是运行在Java虚拟机之上的,所以Java内存模型,也就是指Java虚拟机的运行时内存模型。 java中内存全权交给虚拟机去管理,那虚拟机的运行时内存是如何构成的? 很多时候,我们..._彦彬博客

联想服务器RD450杨找不到raid选项,联想ThinkServer RD450服务器RAID配置及WMware vShpere虚拟机安装...-程序员宅基地

文章浏览阅读2.3k次。《联想ThinkServer RD450服务器RAID配置及WMware vShpere虚拟机安装》由会员分享,可在线阅读,更多相关《联想ThinkServer RD450服务器RAID配置及WMware vShpere虚拟机安装(3页珍藏版)》请在人人文库网上搜索。1、联想ThinkServer RD450服务器RAID配置及WMware vShpere虚拟机安装一、服务器基本配置信息联想RD4..._联想rd450raid1配置

Docker最全教程——从理论到实战(六)-程序员宅基地

文章浏览阅读177次。Docker最全教程——从理论到实战(六) 托管到腾讯云容器服务托管到腾讯云容器服务,我们的公众号“magiccodes”已经发布了相关的录屏教程,大家可以结合本篇教程一起查阅。 自建还是托管?在开始之前,我们先来讨论一个问题——是自建容器服务还是托管到云容器服务?这里笔者建议大家托管到云容器服务。对于中小团队来说,很多情况下,..._k8 docker 跨平台

马氏距离(Mahalanobis距离)_squared mahalanobis length-程序员宅基地

文章浏览阅读4.3k次。马氏距离是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧氏距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的)并且是尺度无关的(scale-invariant),即独立于测量尺度。 维基百科的解释: http://zh.wikipedia._squared mahalanobis length

c++一元稀疏多项式计算器_浅谈一元二次方程的解法-程序员宅基地

文章浏览阅读162次。一元二次方程,是初中阶段方程中比较重要的一个。不止可以单独考查,还可以结合函数来出题。从历年的期末、中考卷就可以看出它的重要性。基于此,今天给大家分享我精心总结的一元二次方程基础知识,先从基础开始,逐渐深入掌握。一、 一元二次方程的定义及一般形式:只含有一个未知数x,未知数的最高次数是2,且系数不为 0,这样的方程叫一元二次方程。一元二次方程的一般形式: (a≠0),其中a为二次项系数,b为一次项...