Lettuce 客户端连接 Redis

devtools/2024/10/19 13:33:20/

背景:线上 Redis 偶尔发生执行命令超时的异常:Command timed out after 1 minute(s),但是短时间又找不到具体原因,就想着把执行命令超时时间设置的短一点,查询 Redis 超时以后走 DB,临时解决一下问题,然后再排查超时的具体原因,但是根据官方文档设置 spring.redis.timeout=2000以后,并没有生效,也不知道原因,最后用 java 代码配置成功了,这里记录一下配置方法。

import io.lettuce.core.ClientOptions;
import io.lettuce.core.SocketOptions;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
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.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
import org.springframework.data.redis.serializer.StringRedisSerializer;import java.time.Duration;/*** @author liuyuan* @version RedisConfig.java, v 0.1 2024-08-05 15:43*/
@Slf4j
@Configuration
@EnableRedisRepositories
public class RedisConfig {@Value("${spring.redis.host}")private String redisHost;@Value("${spring.redis.port}")private int redisPort;@Value("${spring.redis.database}")private int redisDatabase;// 这里自定义了名称,是因为公司三方包里面已经有一个 RedisConnectionFactory 了,不换名称,不会加载@Bean@Primarypublic RedisConnectionFactory customRedisConnectionFactory(LettuceClientConfiguration clientConfiguration) {log.info("RedisConfig.customRedisConnectionFactory() init.........");RedisStandaloneConfiguration standaloneConfiguration = new RedisStandaloneConfiguration();standaloneConfiguration.setHostName(redisHost);standaloneConfiguration.setPort(redisPort);standaloneConfiguration.setDatabase(redisDatabase);return new LettuceConnectionFactory(standaloneConfiguration, clientConfiguration);}@Beanpublic LettuceClientConfiguration clientConfiguration() {log.info("RedisConfig.clientConfiguration() init.........");SocketOptions socketOptions = SocketOptions.builder().connectTimeout(Duration.ofSeconds(1)) // 设置连接超时时间.build();ClientOptions clientOptions = ClientOptions.builder().autoReconnect(true) // 是否自动重连.pingBeforeActivateConnection(true) // 是否在激活连接前发送 PING 命令.cancelCommandsOnReconnectFailure(false) // 是否在重连失败时取消命令.disconnectedBehavior(ClientOptions.DisconnectedBehavior.ACCEPT_COMMANDS) // 设置断开连接时的行为.socketOptions(socketOptions).build();return LettuceClientConfiguration.builder().commandTimeout(Duration.ofSeconds(1)) // 设置命令执行超时时间.clientOptions(clientOptions).build();}// 原本到上面为止,配置已经完成了,但是还是因为公司三方包里面已经有一个 RedisConnectionFactory 了,所以这里需要重新设置才会生效// 如果只有一个 RedisConnectionFactory,下面的可以不要@Bean@Primarypublic StringRedisTemplate stringRedisTemplate(@Qualifier("customRedisConnectionFactory") RedisConnectionFactory connectionFactory) {log.info("RedisConfig.stringRedisTemplate() init.........");return new StringRedisTemplate(connectionFactory);}@Bean(name = "redisTemplate")public RedisTemplate<String, String> redisTemplate(@Qualifier("customRedisConnectionFactory") RedisConnectionFactory connectionFactory) {log.info("RedisConfig.redisTemplate() init.........");RedisTemplate<String, String> template = new RedisTemplate<>();template.setConnectionFactory(connectionFactory);template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new StringRedisSerializer());template.afterPropertiesSet();return template;}
} 

http://www.ppmy.cn/devtools/90871.html

相关文章

【算法】贪心算法

应用场景——集合覆盖问题 假设存在下面需要付费的广播台&#xff0c;以及广播台信号可以覆盖的地区。如何选择最少的广播台&#xff0c;让所有的地区都可以接收到信号 贪心算法介绍 1.贪心算法是指在对问题进行求解时&#xff0c;在每一步选择中都采取最好或者最优的选择 2…

【Linux-WMware Tools安装失败“segmentation fault”解决方法】

VMware版本&#xff1a;17 Ubuntu版本: 22.04 安装常规办法&#xff0c;通过vmware安装Tool&#xff0c;安装显示报错&#xff1a;“segmentation fault”&#xff0c;查了下可能是tool和ubuntu版本不兼容导致的。解决办法&#xff1a;通过命令行逐次安装。 1、sudo apt insta…

前端使用 Konva 实现可视化设计器(19)- 连接线 - 直线、折线

本章响应小伙伴的反馈&#xff0c;除了算法自动画连接线&#xff08;仍需优化完善&#xff09;&#xff0c;实现了可以手动绘制直线、折线连接线功能。 请大家动动小手&#xff0c;给我一个免费的 Star 吧~ 大家如果发现了 Bug&#xff0c;欢迎来提 Issue 哟~ github源码 gitee…

基于python的旅游可视化系统(源码+论文+部署讲解等)

博主介绍&#xff1a;✌全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;原生小程序开发&#xff0c…

oracle库PASSWORD_VERSIONS 对应的加密方式

oracle库PASSWORD_VERSIONS 对应的加密方式 10G DES 11G SHA-1 12C SHA-2-based SHA-512官方文档&#xff1a; https://docs.oracle.com/database/121/DBSEG/authentication.htm#DBSEG487

捕鱼达人 高端游戏 休闲游戏

《捕鱼达人》是一款以深海狩猎为题材的休闲竞技游戏。2009年《捕鱼达人》上线&#xff0c;最初以简单轻松的捕鱼玩法获得了玩家的喜爱。 2015年的《捕鱼达人》还原了海洋深处的美丽场景&#xff0c;游戏画面以及击中大鱼时的特效音乐。 这是一场海底世界的远征&#xff0c;在这…

注意力特征融合

摘要 https://arxiv.org/pdf/2009.14082 特征融合,即来自不同层或分支的特征的组合,是现代网络架构中无处不在的一部分。它通常通过简单的操作来实现,如求和或拼接,但这可能不是最佳选择。在这项工作中,我们提出了一种统一且通用的方案,即注意力特征融合,它适用于大多数…

7月小游戏畅销榜Top 100:MMO游戏数量增多,26款新入榜

易采游戏网8月4日消息&#xff1a;2024年7月的小游戏畅销榜Top100已经揭晓&#xff0c;给广大游戏玩家带来了不少惊喜和期待。与上个月相比&#xff0c;本月的榜单不仅新入榜游戏数量达到了26款&#xff0c;还显示了MMO&#xff08;大型多人在线&#xff09;游戏的强劲增长趋势…