iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Redis怎么配置多个数据库
  • 183
分享到

Redis怎么配置多个数据库

2023-06-29 15:06:58 183人浏览 安东尼
摘要

这篇文章主要介绍“Redis怎么配置多个数据库”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis怎么配置多个数据库”文章能帮助大家解决问题。前言redis 默认有 0-16 号数据库,一般我们

这篇文章主要介绍“Redis怎么配置多个数据库”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis怎么配置多个数据库”文章能帮助大家解决问题。

前言

redis 默认有 0-16 号数据库,一般我们操作redis时,用的是 0号数据库,但是有时我们的项目想同时操作多个数据库,又不想每次访问其它库数据时 select 切换数据库,这样太繁琐。

因此我们需要配置多个Jedis Client,但是jedis是容易阻塞,效率不太好,所以我这边采用了 Lettuce Client,它是 Reactive 的连接方式,效率比较高。但是怎么使用到 Lettuce Client,其实一般我们添加  spring-boot-starter-data-redis  依赖,通过RedisTemplate 去使用Redis的功能时,当版本很高的时候默认RedisTemplate底层用的就是通过Lettuce Client 去建立连接和操作数据。

一、添加pom 依赖

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-data-redis</artifactId>    <version>2.0.5.RELEASE</version></dependency>

二、多数据源的配置和添加到spring容器

下面我的截图使用了四个数据源,分别是1,2,3,4号库。

1)新建一个configuration 配置类

2)new RedisStandaloneConfiguration(host, port); 初始化一个Redis配置,并接下来选择好库号。

3)初始化一个 LettuceConnectionFactory 。

4)实例化一个 RedisTemplate ,并设置键值序列化的方式,这里key和value都是字符串的,所以序列化器选择  StringRedisSerializer。

5)给 RedisTemplate 设置第三步创建的 LettuceConnectionFactory,并以@Bean注解注入到spring容器中,使用时直接通过方法名字在spring容器中查找,装配到引用它的实例中。

import io.lettuce.core.resource.ClientResources;import io.lettuce.core.resource.DefaultClientResources;import org.apache.commons.pool2.impl.GenericObjectPoolConfig;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.RedisConnectionFactory;import org.springframework.data.redis.connection.RedisPassWord;import org.springframework.data.redis.connection.RedisStandaloneConfiguration;import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;import org.springframework.data.redis.connection.lettuce.LettucePoolinGClientConfiguration;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.StringRedisSerializer;import org.springframework.util.ObjectUtils; import java.time.Duration;  @Configurationpublic class RedisDatasourceConfiguration {     @Value("${redis.isCleanRedisCache:false}")    private String cleanRedisCache;    @Value("${redis.host:127.0.0.1}")    public String host;    @Value("${redis.port:6379}")    public Integer port;    private String password;     @Value("${redis.timeout:2000}")    public Integer timeout;    public Integer maxIdle = 16;    public Integer minIdle = 5;    public Integer maxTotal = 30;      @Bean    public RedisTemplate<String, String> stringRedisTemplate1() {        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port);        configuration.setDatabase(1);        if (!ObjectUtils.isEmpty(password)) {            RedisPassword redisPassword = RedisPassword.of(password);            configuration.setPassword(redisPassword);        }        return createRedisTemplate(creatFactory(configuration));    }     @Bean    public RedisTemplate<String, String> stringRedisTemplate2() {        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port);        configuration.setDatabase(2);        if (!ObjectUtils.isEmpty(password)) {            RedisPassword redisPassword = RedisPassword.of(password);            configuration.setPassword(redisPassword);        }        return createRedisTemplate(creatFactory(configuration));    }    @Bean    public RedisTemplate<String, String> stringRedisTemplate3() {        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port);        configuration.setDatabase(3);        if (!ObjectUtils.isEmpty(password)) {            RedisPassword redisPassword = RedisPassword.of(password);            configuration.setPassword(redisPassword);        }        return createRedisTemplate(creatFactory(configuration));    }    @Bean    public RedisTemplate<String, String> stringRedisTemplate4() {        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port);        configuration.setDatabase(4);        if (!ObjectUtils.isEmpty(password)) {            RedisPassword redisPassword = RedisPassword.of(password);            configuration.setPassword(redisPassword);        }        return createRedisTemplate(creatFactory(configuration));    }     @Bean    public RedisTemplate<String, String> stringRedisTemplate5() {        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port);        configuration.setDatabase(5);        if (!ObjectUtils.isEmpty(password)) {            RedisPassword redisPassword = RedisPassword.of(password);            configuration.setPassword(redisPassword);        }        return createRedisTemplate(creatFactory(configuration));    }     private RedisTemplate<String, String> getSerializerRedisTemplate(){        RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();        redisTemplate.seTKEySerializer(new StringRedisSerializer());        redisTemplate.setHashKeySerializer(new StringRedisSerializer());        redisTemplate.setHashValueSerializer(new StringRedisSerializer());        return redisTemplate;    }     private RedisTemplate createRedisTemplate(RedisConnectionFactory redisConnectionFactory) {        RedisTemplate<String, String> redisTemplate = getSerializerRedisTemplate();        redisTemplate.setConnectionFactory(redisConnectionFactory);        redisTemplate.afterPropertiesSet();        return redisTemplate;    }    private GenericObjectPoolConfig getGenericObjectPoolConfig(){        GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();        genericObjectPoolConfig.setMaxTotal(maxTotal);        genericObjectPoolConfig.setMinIdle(minIdle);        genericObjectPoolConfig.setMaxIdle(maxIdle);        genericObjectPoolConfig.setMaxWaitMillis(timeout);        return genericObjectPoolConfig;    }     private LettuceConnectionFactory creatFactory(RedisStandaloneConfiguration configuration){        LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder builder = LettucePoolingClientConfiguration.builder();        builder.poolConfig(getGenericObjectPoolConfig()); //        LettuceClientConfiguration.LettuceClientConfigurationBuilder builder = LettuceClientConfiguration.builder();//        builder.clientResources(clientResources());//        builder.commandTimeout(Duration.ofSeconds(3000));        LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(configuration, builder.build());        connectionFactory.afterPropertiesSet();        return connectionFactory;    }}

三、使用方式

Redis怎么配置多个数据库

这里引用是2号库,即上面通过@Bean 加载到spring容器中的。

关于“Redis怎么配置多个数据库”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Redis怎么配置多个数据库

本文链接: https://www.lsjlt.com/news/325509.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • C++ 生态系统中流行库和框架的贡献指南
    作为 c++++ 开发人员,通过遵循以下步骤即可为流行库和框架做出贡献:选择一个项目并熟悉其代码库。在 issue 跟踪器中寻找适合初学者的问题。创建一个新分支,实现修复并添加测试。提交...
    99+
    2024-05-15
    框架 c++ 流行库 git
  • C++ 生态系统中流行库和框架的社区支持情况
    c++++生态系统中流行库和框架的社区支持情况:boost:活跃的社区提供广泛的文档、教程和讨论区,确保持续的维护和更新。qt:庞大的社区提供丰富的文档、示例和论坛,积极参与开发和维护。...
    99+
    2024-05-15
    生态系统 社区支持 c++ overflow 标准库
  • c++中if elseif使用规则
    c++ 中 if-else if 语句的使用规则为:语法:if (条件1) { // 执行代码块 1} else if (条件 2) { // 执行代码块 2}// ...else ...
    99+
    2024-05-15
    c++
  • c++中的继承怎么写
    继承是一种允许类从现有类派生并访问其成员的强大机制。在 c++ 中,继承类型包括:单继承:一个子类从一个基类继承。多继承:一个子类从多个基类继承。层次继承:多个子类从同一个基类继承。多层...
    99+
    2024-05-15
    c++
  • c++中如何使用类和对象掌握目标
    在 c++ 中创建类和对象:使用 class 关键字定义类,包含数据成员和方法。使用对象名称和类名称创建对象。访问权限包括:公有、受保护和私有。数据成员是类的变量,每个对象拥有自己的副本...
    99+
    2024-05-15
    c++
  • c++中优先级是什么意思
    c++ 中的优先级规则:优先级高的操作符先执行,相同优先级的从左到右执行,括号可改变执行顺序。操作符优先级表包含从最高到最低的优先级列表,其中赋值运算符具有最低优先级。通过了解优先级,可...
    99+
    2024-05-15
    c++
  • c++中a+是什么意思
    c++ 中的 a+ 运算符表示自增运算符,用于将变量递增 1 并将结果存储在同一变量中。语法为 a++,用法包括循环和计数器。它可与后置递增运算符 ++a 交换使用,后者在表达式求值后递...
    99+
    2024-05-15
    c++
  • c++中a.b什么意思
    c++kquote>“a.b”表示对象“a”的成员“b”,用于访问对象成员,可用“对象名.成员名”的语法。它还可以用于访问嵌套成员,如“对象名.嵌套成员名.成员名”的语法。 c++...
    99+
    2024-05-15
    c++
  • C++ 并发编程库的优缺点
    c++++ 提供了多种并发编程库,满足不同场景下的需求。线程库 (std::thread) 易于使用但开销大;异步库 (std::async) 可异步执行任务,但 api 复杂;协程库 ...
    99+
    2024-05-15
    c++ 并发编程
  • 如何在 Golang 中备份数据库?
    在 golang 中备份数据库对于保护数据至关重要。可以使用标准库中的 database/sql 包,或第三方包如 github.com/go-sql-driver/mysql。具体步骤...
    99+
    2024-05-15
    golang 数据库备份 mysql git 标准库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作