一、配置文件

pom.xml

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

application.yml

spring:application:name: double-redis-lettuceprofiles:active: devjackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8server:port: 8008sys:redis:one:    host: 192.168.1.2port: 5009timeout: 6000lettuce:pool:max-active: 30max-idle: 10max-wait: 6000slave:host: 192.168.1.3port: 5010database: 1two:timeout: 12000lettuce:pool:max-active: 30max-idle: 10max-wait: 6000sentinel:master: redis_sentinel_masternodes:- sentinel-group001.mk.com:10003- sentinel-group002.mk.com:10003- sentinel-group003.mk.com:10003

二、配置Configuration Bean

Lettuce配置基类

public class AbstractLettuceRedisConfig {public LettuceConnectionFactory createLettuceConnectionFactory(ClientResources clientResources, RedisProperties properties) {LettuceClientConfiguration clientConfiguration = getLettuceClientConfiguration(clientResources, properties);RedisSentinelConfiguration sentinelConf = getSentinelConfig(properties);if (sentinelConf != null) {return new LettuceConnectionFactory(sentinelConf, clientConfiguration);}RedisClusterConfiguration clusterConf = getClusterConfiguration(properties);if (clusterConf != null) {return new LettuceConnectionFactory(clusterConf, clientConfiguration);}return new LettuceConnectionFactory(getStandaloneConfig(properties), clientConfiguration);}private RedisStandaloneConfiguration getStandaloneConfig(RedisProperties properties) {RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();if (StringUtils.hasText(properties.getUrl())) {ConnectionInfo connectionInfo = parseUrl(properties.getUrl());config.setHostName(connectionInfo.getHostName());config.setPort(connectionInfo.getPort());config.setPassword(RedisPassword.of(connectionInfo.getPassword()));} else {config.setHostName(properties.getHost());config.setPort(properties.getPort());config.setPassword(RedisPassword.of(properties.getPassword()));}config.setDatabase(properties.getDatabase());return config;}private RedisClusterConfiguration getClusterConfiguration(RedisProperties properties) {if (properties.getCluster() == null) {return null;}RedisProperties.Cluster clusterProperties = properties.getCluster();RedisClusterConfiguration config = new RedisClusterConfiguration(clusterProperties.getNodes());if (clusterProperties.getMaxRedirects() != null) {config.setMaxRedirects(clusterProperties.getMaxRedirects());}if (properties.getPassword() != null) {config.setPassword(RedisPassword.of(properties.getPassword()));}return config;}private RedisSentinelConfiguration getSentinelConfig(RedisProperties properties) {RedisProperties.Sentinel sentinelProperties = properties.getSentinel();if (sentinelProperties != null) {RedisSentinelConfiguration config = new RedisSentinelConfiguration();config.master(sentinelProperties.getMaster());config.setSentinels(createSentinels(sentinelProperties));if (properties.getPassword() != null) {config.setPassword(RedisPassword.of(properties.getPassword()));}config.setDatabase(properties.getDatabase());return config;}return null;}private List<RedisNode> createSentinels(RedisProperties.Sentinel sentinel) {List<RedisNode> nodes = new ArrayList<>();for (String node : sentinel.getNodes()) {try {String[] parts = StringUtils.split(node, ":");Assert.state(parts.length == 2, "Must be defined as 'host:port'");nodes.add(new RedisNode(parts[0], Integer.valueOf(parts[1])));} catch (RuntimeException ex) {throw new IllegalStateException("Invalid redis sentinel " + "property '" + node + "'", ex);}}return nodes;}private LettuceClientConfiguration getLettuceClientConfiguration(ClientResources clientResources, RedisProperties properties) {LettuceClientConfiguration.LettuceClientConfigurationBuilder builder = createBuilder(Optional.ofNullable(properties.getLettuce()).map(v -> v.getPool()).orElse(null));applyProperties(builder, properties);if (StringUtils.hasText(properties.getUrl())) {customizeConfigurationFromUrl(builder, properties);}builder.clientResources(clientResources);return builder.build();}private LettuceClientConfiguration.LettuceClientConfigurationBuilder createBuilder(RedisProperties.Pool pool) {if (pool == null) {return LettuceClientConfiguration.builder();}return new PoolBuilderFactory().createBuilder(pool);}private LettuceClientConfiguration.LettuceClientConfigurationBuilder applyProperties(LettuceClientConfiguration.LettuceClientConfigurationBuilder builder, RedisProperties properties) {if (properties.isSsl()) {builder.useSsl();}if (properties.getTimeout() != null) {builder.commandTimeout(properties.getTimeout());}if (properties.getLettuce() != null) {RedisProperties.Lettuce lettuce = properties.getLettuce();if (lettuce.getShutdownTimeout() != null && !lettuce.getShutdownTimeout().isZero()) {builder.shutdownTimeout(properties.getLettuce().getShutdownTimeout());}}return builder;}private void customizeConfigurationFromUrl(LettuceClientConfiguration.LettuceClientConfigurationBuilder builder, RedisProperties properties) {ConnectionInfo connectionInfo = parseUrl(properties.getUrl());if (connectionInfo.isUseSsl()) {builder.useSsl();}}private ConnectionInfo parseUrl(String url) {try {URI uri = new URI(url);boolean useSsl = (url.startsWith("rediss://"));String password = null;if (uri.getUserInfo() != null) {password = uri.getUserInfo();int index = password.indexOf(':');if (index >= 0) {password = password.substring(index + 1);}}return new ConnectionInfo(uri, useSsl, password);} catch (URISyntaxException ex) {throw new IllegalArgumentException("Malformed url '" + url + "'", ex);}}private static class ConnectionInfo {private final URI uri;private final boolean useSsl;private final String password;public ConnectionInfo(URI uri, boolean useSsl, String password) {this.uri = uri;this.useSsl = useSsl;this.password = password;}public boolean isUseSsl() {return this.useSsl;}public String getHostName() {return this.uri.getHost();}public int getPort() {return this.uri.getPort();}public String getPassword() {return this.password;}}private static class PoolBuilderFactory {public LettuceClientConfiguration.LettuceClientConfigurationBuilder createBuilder(RedisProperties.Pool properties) {return LettucePoolingClientConfiguration.builder().poolConfig(getPoolConfig(properties));}private GenericObjectPoolConfig<?> getPoolConfig(RedisProperties.Pool properties) {GenericObjectPoolConfig<?> config = new GenericObjectPoolConfig<>();config.setMaxTotal(properties.getMaxActive());config.setMaxIdle(properties.getMaxIdle());config.setMinIdle(properties.getMinIdle());if (properties.getTimeBetweenEvictionRuns() != null) {config.setTimeBetweenEvictionRunsMillis(properties.getTimeBetweenEvictionRuns().toMillis());}if (properties.getMaxWait() != null) {config.setMaxWaitMillis(properties.getMaxWait().toMillis());}return config;}}}

(1)第一个Redis配置


public class OneLettuceRedisConfig  extends AbstractLettuceRedisConfig{@Beanpublic StringRedisTemplate oneStringRedisTemplate(@Autowired @Qualifier("oneRedisConnectionFactory")
RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {StringRedisTemplate template = new StringRedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;}@Beanpublic LettuceConnectionFactory oneRedisConnectionFactory(@Autowired @Qualifier("oneRedisProperties") RedisProperties properties,ClientResources clientResources) throws UnknownHostException {return createLettuceConnectionFactory(clientResources, properties);}@Bean@ConfigurationProperties("sys.redis.one")public RedisProperties oneRedisProperties() {return new RedisProperties();}
}

(2)第二个Redis配置(主)

public class TwoLettuceRedisConfig extends AbstractLettuceRedisConfig{@Primary@Beanpublic StringRedisTemplate twoStringRedisTemplate(@Autowired @Qualifier("twoRedisConnectionFactory")
RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {StringRedisTemplate template = new StringRedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;}@Primary@Beanpublic LettuceConnectionFactory twoRedisConnectionFactory(@Autowired @Qualifier("twoRedisProperties") RedisProperties properties,ClientResources clientResources) throws UnknownHostException {return createLettuceConnectionFactory(clientResources, properties);}@Primary@Bean@ConfigurationProperties("sys.redis.two")public RedisProperties twoRedisProperties() {return new RedisProperties();}
}

(3)redis导入配置

@Configuration
@Import({OneLettuceRedisConfig.class, TwoLettuceRedisConfig.class})
public class RedisConfig {}

注意:去掉默认自动配置

@SpringBootApplication(exclude = {RedisAutoConfiguration.class})
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}

SpringBoot2.1.9 多Redis Lettuce配置相关推荐

  1. SpringBoot2.1.9 多Redis Jedis配置

    一.配置文件 pom.xml <dependency><groupId>org.springframework.boot</groupId><artifact ...

  2. java lettuce配置多数据源_Spring Boot 2.x Redis多数据源配置(jedis,lettuce)

    多数据源最终表现其实就是 redis connection factory 不同 springboot 默认的redis配置维护了一套 connection factory 自己维护一套 connec ...

  3. redis Lettuce客户端

    文章目录 引入redis 自动配置 创建LettuceConnectionFactory RedisTemplate StringRedisTemplate 如何序列化,序列化是怎么工作的 如何与re ...

  4. springboot集成redis (Lettuce)

    目前java操作redis的客户端有jedis跟Lettuce.在springboot1.x系列中,其中使用的是jedis,但是到了springboot2.x其中使用的是Lettuce. 因为我们的版 ...

  5. lettuce 配置域名 dns 切换

    大家好,我是烤鸭:      如果你也有类似的困扰,运维告诉你,redis连接配置域名,这样出问题了,直接改dns地址就行,不需要重启服务...梦想是美好的,现实是残酷的.如果你使用的是 lettuc ...

  6. redis lettuce 超时_Spring Cache 操作 Redis 实现数据缓存(上)

    点击上方☝SpringForAll社区 轻松关注!及时获取有趣有料的技术文章 本文来源:http://www.mydlq.club/article/55/ . 一.缓存概念知识 . 1.是什么缓存 . ...

  7. Laravel中Redis的配置和使用

    引入redis composer require predis/predis 会在composer.json中引入最新版本的predis composer update 把下载predis 库加入到v ...

  8. Redis环境配置(核心配置选项)

    Redis的配置信息在/etc/redis/redis.conf下. 查看 sudo vi /etc/redis/redis.conf 核心配置选项 绑定ip:如果需要远程访问,可将此⾏注释,或绑定⼀ ...

  9. Redis 主从配置和参数详解

    安装redis 下载redis wget http://download.redis.io/releases/redis-3.0.7.tar.gz解压redis tar -xvf redis-3.0. ...

最新文章

  1. WebServieces 部署到PocketPC上的问题(SystemNotSupportException)
  2. OPENCV已知内参求外参
  3. 关于Hibernate中的Configuration
  4. 后缀数组DC3算法实现
  5. Elasticsearch(二), WebService, 机器人参考资源, Spring
  6. web.xml上下文配置
  7. delphi 通讯数据解析_网络工程师-ARP是如何解析?
  8. javascript 数组合并与去重
  9. 嵌入式(二)——Jlink接口定义
  10. Android 垃圾分类APP(三)垃圾分类之语音输入
  11. 计算机网络拓扑图 模板,网络拓扑图绘制.doc
  12. hackthon java_Hackathon 参赛指南——如何愉快地参加一场 Hackathon
  13. Win10上轻松安装docker,更改镜像安装目录
  14. LSTM预测股票收盘价
  15. eHIDS 一款基于eBPF的HIDS开源工具
  16. CL210管理存储--实现块存储
  17. P2 PikaChu_SQL注入
  18. CTP: SimNow , 策略模拟交易利器,赞!
  19. QMidi Pro for mac (终极多媒体卡拉OK播放器)
  20. python导出dxf图_利用Dxfwrite/ezdxf操作CAD文件!

热门文章

  1. ios realm 文件_iOS开发中使用Realm数据库
  2. [PAT乙级]1006 换个格式输出整数
  3. [Java基础]TreeSet集合概述和特点
  4. [蓝桥杯2015决赛]机器人数目-枚举
  5. Fibonacci Sum HDU - 6755【2020 Multi-University Training Contest 1】斐波那契数列变形+二项式定理
  6. Shaolin HDU - 4585(map模板题)
  7. python窗口显示表格_pyqt 调用tablewidget窗口时无法显示窗口内容
  8. python os模块详细_python之os模块详解
  9. OpenCV Mat数据类型像素操作
  10. FastDFS分布式文件系统设计原理