Redis学习笔记3:基于springboot的lettuce redis客户端validateConnection连接有效性检查

文章介绍了SpringBootRedis框架中LettuceConnectionFactory的validateConnection属性,用于在性能需求不高时进行连接有效性检查,确保Redis操作的正确性。此外,还提到了一个支持多种Redis连接选项的开源SDKemily-spring-boot-redis。

LettuceConnectionFactory连接工厂默认对redis操作时不会对本地共享连接进行有效性检测,不进行有效性检测可以 提升应用程序的性能,但是也会带来一定的连接无效性的风险,LettuceConnectionFactory提供了一个validateConnection属性,默认值是false,可以在我们对性能要求不是很高的场景下对redis操作之前进行有效性检查,如果无效则重新建立连接。

一个对springboot redis框架进行重写,支持lettuce、jedis、连接池、同时连接多个集群、多个redis数据库、开发自定义属性配置的开源SDK

<dependency>
    <groupId>io.github.mingyang66</groupId>
    <artifactId>emily-spring-boot-redis</artifactId>
    <version>4.3.9</version>
</dependency>

GitHub地址:https://github.com/mingyang66/spring-parent

一、LettuceConnectionFactory连接工厂属性
//是否进行连接有效性检查,默认:false
private boolean validateConnection = false;
二、LettuceConnectionFactory.SharedConnection#getConnection获取连接并进行有效性检查
		@Nullable
		StatefulConnection<E, E> getConnection() {

			synchronized (this.connectionMonitor) {

				if (this.connection == null) {
          //获取共享本地连接
					this.connection = getNativeConnection();
				}
        //判定是否进行连接有效性检查
				if (getValidateConnection()) {
					validateConnection();
				}

				return this.connection;
			}
		}
三、LettuceConnectionFactory.SharedConnection#validateConnection对连接进行检查或重建
		void validateConnection() {

			synchronized (this.connectionMonitor) {
				//连接是否有效,默认:无效
				boolean valid = false;
				//如果连接不为空,并且是打开状态,则对连接进行ping操作
				if (connection != null && connection.isOpen()) {
					try {

						if (connection instanceof StatefulRedisConnection) {
							((StatefulRedisConnection) connection).sync().ping();
						}

						if (connection instanceof StatefulRedisClusterConnection) {
							((StatefulRedisClusterConnection) connection).sync().ping();
						}
            //如果可以ping通,则说明是有效连接
						valid = true;
					} catch (Exception e) {
						log.debug("Validation failed", e);
					}
				}

				if (!valid) {

					log.info("Validation of shared connection failed; Creating a new connection.");
          //如果是无效连接,则重置连接
					resetConnection();
          //重新建立本地连接
					this.connection = getNativeConnection();
				}
			}
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值