我的编程空间,编程开发者的网络收藏夹
学习永远不晚

springboot之怎么同时连接多个redis

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

springboot之怎么同时连接多个redis

本文小编为大家详细介绍“springboot之怎么同时连接多个redis”,内容详细,步骤清晰,细节处理妥当,希望这篇“springboot之怎么同时连接多个redis”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

技术选型 

Springboot连接reids的三个客户端

Jedis:是Redis的Java实现客户端,提供了比较全面的Redis命令的支持,复杂的redis操作需要使用它;springboot1.x 默认集成;据说在高并发下有并发性问题出现;

Lettuce:高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器,springboot 2.x 默认集成

Redission:Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publish / Subscribe, Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service) Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。暂时企业级开发感觉只是使用了分布式锁

结论:

单个redis随便使用哪个客户端都可以,也可以使用 Jedis + Redission 或者 Lettuce + Redission;

由于Jedis使用和研究比较多,此处使用Jedis抛砖引玉,实现三组redis + 分布式锁;Lettuce版本也可以根据此思路编写;

代码部分

maven pom引用

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><!-- 不依赖Redis的异步客户端lettuce --><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions></dependency> <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency>

application.yml配置

spring:  redis:    r1:      host: 192.168.1.210      port: 6379      password:       #cluster:        #nodes: 192.168.1.101:6379,192.168.1.102:6379,192.168.1.103:6379    r2:      host: 192.168.1.211      port: 6379      password:       #cluster:        #nodes: 192.168.1.104:6379,192.168.1.105:6379,192.168.1.106:6379    r3:      host: 192.168.1.212      port: 6379      password:       #cluster:        #nodes: 192.168.1.107:6379,192.168.1.108:6379,192.168.1.109:6379

Configuration代码

 import java.util.HashSet;import java.util.Set; import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisClusterConfiguration;import org.springframework.data.redis.connection.RedisConnection;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.connection.RedisNode;import org.springframework.data.redis.connection.RedisPassword;import org.springframework.data.redis.connection.RedisStandaloneConfiguration;import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate; import cn.hutool.core.util.StrUtil;import lombok.extern.slf4j.Slf4j;import redis.clients.jedis.JedisPoolConfig; @Slf4j@Configurationpublic class RedisJedisConfig2 {// r1 redis 配置信息    @Value("${spring.redis.r1.host:}")    private String r1Host;     @Value("${spring.redis.r1.port:}")    private Integer r1Port;     @Value("${spring.redis.r1.password:}")    private String r1Password;        @Value("${spring.redis.r1.cluster.nodes:}")    private String r1Nodes;     //r2 redis 配置信息    @Value("${spring.redis.r2.host:}")    private String r2Host;     @Value("${spring.redis.r2.port:}")    private Integer r2Port;     @Value("${spring.redis.r2.password:}")    private String r2Password;        @Value("${spring.redis.r2.cluster.nodes:}")    private String r2Nodes;        //r3 redis 配置信息    @Value("${spring.redis.r3.host:}")    private String r3Host;     @Value("${spring.redis.r3.port:}")    private Integer r3Port;     @Value("${spring.redis.r3.password:}")    private String r3Password;        @Value("${spring.redis.r3.cluster.nodes:}")    private String r3Nodes;         public RedisConnectionFactory connectionFactory(    RedisStandaloneConfiguration redisStandaloneConfiguration,     RedisClusterConfiguration redisClusterConfiguration,     JedisPoolConfig jedisPoolConfig) {    if (redisStandaloneConfiguration == null && redisClusterConfiguration == null) {    log.error("==============请添加redis配置================");    return null;    }            JedisConnectionFactory jedisConnectionFactory = null;                if (redisStandaloneConfiguration != null) {        jedisConnectionFactory = new JedisConnectionFactory(redisStandaloneConfiguration);        } else {        jedisConnectionFactory = new JedisConnectionFactory(redisClusterConfiguration, jedisPoolConfig);        }        jedisConnectionFactory.afterPropertiesSet();                // 检查是否可用        RedisConnection connection = null;        try {        connection = jedisConnectionFactory.getConnection();        log.info("reids是否可用:" + !connection.isClosed());        } catch(Exception e) {        log.error("reids不可用,请检查组件是否启动:",e);        } finally {        connection.close();        }                return jedisConnectionFactory;    }         public JedisPoolConfig poolConfig() {    JedisPoolConfig config = new JedisPoolConfig();        config.setMaxTotal(200);        config.setMaxIdle(50);        config.setMinIdle(8);        config.setMaxWaitMillis(10000);         // 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1        config.setTestOnBorrow(true);           // 在获取连接的时候检查有效性, 默认false        config.setTestOnReturn(false);          // 调用returnObject方法时,是否进行有效检查        config.setTestWhileIdle(true);          // Idle时进行连接扫描        config.setTimeBetweenEvictionRunsMillis(30000);     // 表示idle object evitor两次扫描之间要sleep的毫秒数        config.setNumTestsPerEvictionRun(10);               // 表示idle object evitor每次扫描的最多的对象数        config.setMinEvictableIdleTimeMillis(60000);        // 表示一个对象至少停留在idle状态的最短时间,然后才能被idle object evitor扫描并驱逐;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义        return config;    }            public RedisStandaloneConfiguration redisStandaloneConfiguration(String host, int port, String password, int index) {    RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(host, port);        if (StrUtil.isNotBlank(password)) {    redisStandaloneConfiguration.setPassword(password);        }    if (index != 0) {    redisStandaloneConfiguration.setDatabase(index);        }    return redisStandaloneConfiguration;    }            public RedisClusterConfiguration redisClusterConfiguration(String clusterNodes, String password) {        RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration();        // Set<RedisNode> clusterNodes        String[] serverArray = clusterNodes.split(",");        Set<RedisNode> nodes = new HashSet<RedisNode>();        for (String ipPort : serverArray) {            String[] ipAndPort = ipPort.split(":");            nodes.add(new RedisNode(ipAndPort[0].trim(), Integer.valueOf(ipAndPort[1])));        }        redisClusterConfiguration.setClusterNodes(nodes);        redisClusterConfiguration.setMaxRedirects(6);        if (StrUtil.isNotBlank(password)) {        redisClusterConfiguration.setPassword(RedisPassword.of(password));        }        return redisClusterConfiguration;    }     @Bean(name = "redisR1Template")    public RedisTemplate<String, Object> redisR1Template() {    RedisTemplate<String, Object> template = new RedisTemplate<>();        RedisStandaloneConfiguration redisStandaloneConfiguration = null;        RedisClusterConfiguration redisClusterConfiguration = null;        if (StrUtil.isNotBlank(r1Host) && StrUtil.isBlank(r1Nodes)) {        redisStandaloneConfiguration = redisStandaloneConfiguration(r1Host, r1Port, r1Password, 0);        } else if (StrUtil.isNotBlank(r1Nodes)) {        redisClusterConfiguration = redisClusterConfiguration(r1Nodes, r1Password);        }        log.info("=========================R1 redis信息 开始===============================");        template.setConnectionFactory(connectionFactory(redisStandaloneConfiguration, redisClusterConfiguration, poolConfig()));        log.info("=========================R1 redis信息 结束===============================");        return template;    }     @Bean(name = "redisR2Template")    public RedisTemplate<String, Object> redisR2Template() {    RedisTemplate<String, Object> template = new RedisTemplate<>();        RedisStandaloneConfiguration redisStandaloneConfiguration = null;        RedisClusterConfiguration redisClusterConfiguration = null;        if (StrUtil.isNotBlank(r2Host) && StrUtil.isBlank(r2Nodes)) {        redisStandaloneConfiguration = redisStandaloneConfiguration(r2Host, r2Port, r2Password, 0);        } else if (StrUtil.isNotBlank(r2Nodes)) {        redisClusterConfiguration = redisClusterConfiguration(r2Nodes, r2Password);        }        log.info("=========================R2 redis信息 开始===============================");        template.setConnectionFactory(connectionFactory(redisStandaloneConfiguration, redisClusterConfiguration, poolConfig()));        log.info("=========================R2 redis信息 结束===============================");        return template;    }        @Bean(name = "redisR3Template")    public RedisTemplate<String, Object> redisR3Template() {    RedisTemplate<String, Object> template = new RedisTemplate<>();        RedisStandaloneConfiguration redisStandaloneConfiguration = null;        RedisClusterConfiguration redisClusterConfiguration = null;        if (StrUtil.isNotBlank(r3Host) && StrUtil.isBlank(r3Nodes)) {        redisStandaloneConfiguration = redisStandaloneConfiguration(r3Host, r3Port, r3Password, 0);        } else if (StrUtil.isNotBlank(r3Nodes)) {        redisClusterConfiguration = redisClusterConfiguration(r3Nodes, r3Password);        }        log.info("=========================R3 redis信息 开始===============================");        template.setConnectionFactory(connectionFactory(redisStandaloneConfiguration, redisClusterConfiguration, poolConfig()));        log.info("=========================R3 redis信息 结束===============================");        return template;    }}

其中在connectionFactory方法中,添加了,自动检查redis是否连接成功的代码,在启动项目时即可判断是否连接成功。

启动失败日志

springboot之怎么同时连接多个redis

启动成功日志

springboot之怎么同时连接多个redis

类中使用

@RestController@RequestMapping("/redis")public class TestRedisController {@AutowiredRedisTemplate<String, Object> redisR1Template;@AutowiredRedisTemplate<String, Object> redisR2Template;@AutowiredRedisTemplate<String, Object> redisR3Template;@GetMapping("/cs")public String test() {redisR1Template.opsForValue().get("1");redisR2Template.opsForValue().get("1");redisR3Template.opsForValue().get("1");return "1";}}

读到这里,这篇“springboot之怎么同时连接多个redis”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

springboot之怎么同时连接多个redis

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

springboot之怎么同时连接多个redis

本文小编为大家详细介绍“springboot之怎么同时连接多个redis”,内容详细,步骤清晰,细节处理妥当,希望这篇“springboot之怎么同时连接多个redis”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
2023-07-06

springboot之如何同时连接多个redis

这篇文章主要介绍了springboot之如何同时连接多个redis问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-16

springboot怎么处理多个连接

Spring Boot可以使用多个连接的方式来处理,可以通过多线程、连接池等方式来实现。一种常见的方式是使用线程池来处理多个连接。可以使用Java的Executor框架来创建线程池,并使用线程池执行多个连接的任务。可以使用Spring Bo
2023-10-11

同时建立多个goroutine与mongodb连接

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《同时建立多个goroutine与mongodb连接》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!问题内容如何在golang中管
同时建立多个goroutine与mongodb连接
2024-04-04

redis无法多个连接怎么解决

如果Redis无法建立多个连接,可能是因为配置问题或者服务器资源不足导致的。以下是一些可能的解决方法:1. 检查Redis配置文件:查看Redis的最大连接数配置项(maxclients)是否设置得足够大,可以适当调大该值。2. 检查服务器
2023-09-01

使用springboot如何实现配置多个redis连接

这篇文章将为大家详细讲解有关使用springboot如何实现配置多个redis连接,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、springboot nosql 简介Spring Dat
2023-05-31

springboot连接不上redis怎么解决

这篇文章主要介绍“springboot连接不上redis怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springboot连接不上redis怎么解决”文章能帮助大家解决问题。第一种查看防火墙
2023-07-06

springboot怎么连接不同数据库

今天小编给大家分享一下springboot怎么连接不同数据库的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。MySQL当url
2023-07-06

springboot怎么连接两个数据库

这篇“springboot怎么连接两个数据库”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springboot怎么连接两个数
2023-06-29

redis怎么初始化池连接个数

在Redis中,可以通过 `maxTotal` 参数来设置连接池的最大连接数。该参数表示连接池中最大的活动连接数,即同时可以从连接池中分配的最大连接数。以下是一个使用Java的Jedis库来初始化Redis连接池并设置最大连接数的示例:``
2023-09-04

不同云服务器之间怎么连接

不同云服务器之间的连接需要考虑到数据库连接和网络连接的方式。以下是一些常用的云服务器连接和网络连接方式:数据库连接(ODBC)连接云服务器通常使用Oracle、MySQL、MongoDB等关系型数据库来连接到云端。这些数据库可以用来存储数据,管理数据库和开发应用程序。网络连接(NAT)连接使用VPN或其他加速技术,可以将云服务器和其他云端服务器连接起来,以提供高速的数据传输和访问
2023-10-26

MySQL中怎么连接多个表格

在MySQL中,可以使用JOIN语句来连接多个表格。以下是连接多个表格的两种常用方法:INNER JOIN:连接两个或多个表中满足条件的行。语法如下:SELECT 列名FROM 表格1INNER JOIN 表格2 ON 表格1.列名 =
MySQL中怎么连接多个表格
2024-04-09

vps上怎么连接多个网站

连接多个网站到一个VPS上通常有两种方式:使用虚拟主机和使用反向代理。1. 使用虚拟主机:这是最常见的方式,通过虚拟主机软件(如Apache、Nginx等)将多个域名绑定到同一个VPS的IP地址上,然后设置每个域名对应的网站目录。每个域名都
2023-09-16

spring怎么连接多个数据库

在Spring中,可以使用多个数据源来连接多个数据库。下面是一些步骤:1. 在application.properties或application.yml文件中配置多个数据源的连接信息。例如,可以为每个数据源定义不同的datasource.
2023-10-20

oracle怎么连接多个字符串

在Oracle中,可以使用||操作符将多个字符串连接在一起。以下是一些示例:使用||操作符连接两个字符串:SELECT 'Hello' || 'World' AS result FROM dual;结
oracle怎么连接多个字符串
2024-04-09

Springboot怎么同时装配两个相同类型数据库

这篇文章给大家分享的是有关Springboot怎么同时装配两个相同类型数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。同时装配两个相同类型数据库1.配置文件:spring: profiles: act
2023-06-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录