首页 > 数据库 >多RedisTemplate配置

多RedisTemplate配置

时间:2024-04-18 11:22:05浏览次数:28  
标签:return 配置 redis springframework org import RedisTemplate

Spring Boot自2.0版本开始默认使用Lettuce作为Redis的客户端,多RedisTemplate配置方法如下:
先对lettuce连接池配置,基于lettuce配置多数据源的连接工厂,使用@Primary 标注为首选的bean,以及指定并名称,再基于连接工厂配置多数据源的redisTemplate。

点击查看代码
package com.hnltd.auth.config;

/**
 * @author zhuo
 * @date 2023-07-25 16:05:00
 * <Description> 多RedisTemplate配置
 */

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
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.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisRepositoryConfig {

    /**
     * 配置lettuce连接池
     *
     * @return
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.redis.lettuce.pool")
    public GenericObjectPoolConfig<?> redisPool() {
        return new GenericObjectPoolConfig<>();
    }

    /**
     * 配置第一个数据源的连接工厂
     * 这里注意:需要添加@Primary 指定bean的名称,目的是为了创建两个不同名称的LettuceConnectionFactory
     *
     * @return
     */
    @Bean("tokenFactory")
    @Primary
    public LettuceConnectionFactory tokenFactory(@Value("${spring.redis.host}") String host,
                                                 @Value("${spring.redis.port}") int port,
                                                 @Value("${spring.redis.password}") String password,
                                                 GenericObjectPoolConfig<?> config) {
        RedisStandaloneConfiguration redisDataConfig = new RedisStandaloneConfiguration(host, port);
        redisDataConfig.setPassword(RedisPassword.of(password));
        LettuceClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder().poolConfig(config).build();
        return new LettuceConnectionFactory(redisDataConfig, clientConfiguration);
    }

    //第二个数据源的连接工厂
    @Bean("oauthFactory")
    public LettuceConnectionFactory oauthFactory(@Value("${oauth.redis.host}") String host,
                                                 @Value("${oauth.redis.port}") int port,
                                                 @Value("${oauth.redis.password}") String password,
                                                 GenericObjectPoolConfig<?> config) {
        RedisStandaloneConfiguration redisDataConfig = new RedisStandaloneConfiguration(host, port);
        redisDataConfig.setPassword(RedisPassword.of(password));
        LettuceClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder().poolConfig(config).build();
        return new LettuceConnectionFactory(redisDataConfig, clientConfiguration);
    }


    /**
     * 配置第一个数据源的RedisTemplate
     * 注意:这里指定使用名称=factory 的 RedisConnectionFactory
     * 并且标识第一个数据源是默认数据源 @Primary
     *
     * @param dataFactory
     * @return
     */
    @Bean("tokenTemplate")
    @Primary
    public RedisTemplate<String, Object> redisDataTemplate(@Qualifier("tokenFactory") RedisConnectionFactory dataFactory) {
        return getRedisDataTemplate(dataFactory);
    }

    //第二个数据源
    @Bean("oauthTemplate")
    public RedisTemplate<String, Object> redisConcurrencyTemplate(@Qualifier("oauthFactory") RedisConnectionFactory concurrencyFactory) {
        return getRedisDataTemplate(concurrencyFactory);
    }

    /**
     * 设置序列化方式
     *
     * @return
     */
    private RedisTemplate<String, Object> getRedisDataTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(factory);
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        Jackson2JsonRedisSerializer<?> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

标签:return,配置,redis,springframework,org,import,RedisTemplate
From: https://www.cnblogs.com/zhuoyb/p/18143088

相关文章

  • 华为网络设备配置(转载)
    网络工程师考试案例分析中常用的配置可以分为四大类,如下所示。本文我们一起关注前两部分路由器和交换机常用配置命令。 常用配置命令分类【路由器常见配置】 路由器常见配置访问控制列表配置 路由器ACL配置RIP路由配置路由器RIP路由配置OSPF配置......
  • Mac(M1)配置基于ARM64的Tensorflow
    以下步骤最好先执行condaconfig--remove-keychannels 删除conda镜像源pipconfigunsetglobal.index-url 删除pip镜像源然后接下来的步骤最好挂上梯子。1.下载miniforge:从https://github.com/conda-forge/miniforge上找到arm64(AppleSilicon)版本进行下载,下一步下一步的......
  • NGINX Ingress Controller 设置未配置过的域名增加默认路由
    背景k8s集群对应的公网slbip经常被人绑定域名,监控侧经常会收集到502相关状态码的异常告警,着手处理这种badcase策略1.所有没有在ingress配置过的域名要进行处理,即不是公司的、非法绑定到slb上的域名要加上一条策略2.NGINXIngressController设置未配置过的域名......
  • python首次配置selenium
    一、Selenium的配置1.Python环境的安装到官网下载一个合适版本的Python,下载网址如下:https://www.python.org/downloads/DownloadPython|Python.org2.安装PyCharmDownloadPyCharm:ThePythonIDEfordatascienceandwebdevelopmentbyJetBrains安装好之后可以在命......
  • libtorch模型预测环境配置说明
    1、cuda环境(1)更新nvidia显卡驱动首先在NVIDIA官网下载与电脑显卡类型一致的显卡驱动,我的显卡是quadroP2000,下载对应的显卡驱动程序安装。474.82-quadro-rtx-desktop-notebook-win10-win11-64bit-international-whql.exe(2)cuda的安装显卡驱动安装完成后,NVIDIA的控制面板上查看......
  • CentOS+Django+uWSGI+Celery+Supervisor配置
    目录背景目录安装配置Supervisor1.生成配置文件2.修改配置文件3.创建进程文件创建uwsgi.conf进程文件创建celery进程文件启动supervisor启动supervisor查看所有进程的状态常用命令配置文件详解背景使用Django开发的项目需要部署到CentOS中,项目中使用了Celery和uWSGI......
  • React 简单登录平台Demo(0):环境配置
    目录前言Create-react-app环境配置文件路径添加组件添加tailWindcss文件tailwind.config.js添加compilecss目标常见错误添加路由简单路由添加复杂路由添加LoginPageMainPagerouter.js总结前言这次用React简单写一个登录网页的DemoCreate-react-app环境配置create-react-app......
  • HarmonyOS 项目 module.json5默认配置属性及描述
    module.json5entry>src>main>module.json5是模块的配置文件,包含当前模块的配置信息。 其中module对应的是模块的配置信息,一个模块对应一个打包后的hap包,hap包全称是HarmonyOSAbilityPackage,其中包含了ability、第三方库、资源和配置文件。其具体属性及其描述可以参照下表1。......
  • proxysql安装与配置
    insertintomysql_servers(hostgroup_id,hostname,port)values(10,'172.34.88.155',3306);insertintomysql_servers(hostgroup_id,hostname,port)values(10,'172.34.88.165',3306);insertintomysql_servers(hostgroup_id,hostname,port......
  • mysql5.7配置文件
    datadir=/data/mysqlsocket=/var/lib/mysql/mysql.sockDisablingsymbolic-linksisrecommendedtopreventassortedsecurityriskssymbolic-links=0log-error=/data/mysql/mysqld.logpid-file=/data/mysql/mysqld/mysqld.piddefault-time-zone='+8:00'......