redis设置database 不生效剖析

设置database 不生效剖析

  • 前言
  • 配置
  • 加载类
  • 问题
    • commons-pool 对象池

在这里插入图片描述

主页传送门:📀 传送

前言

  事情是这样的 今天在拉取了同事的代码做redis缓存设置的时候,发现即使已经设置了database, 但是存数据的时候还是用的默认0数据库。这引起了我的好奇,遂开始琢磨是什么情况造成的这种现象。

配置

在这里插入图片描述

上述仅为测试代码问题,为了便于维护可以这么写,

spring:redis:host: ${REDIS_HOST:localhost}port: ${REDIS_PORT:6379}password: ${REDIS_PASSWORD:}database: ${REDIS_DATABASE:0}

加载类

然后通过RedisConfiguration 加载

@ConfigurationProperties("spring.redis")
public class RedisConfiguration {private String host;private int port;private String password;private int database;// getters and setters...
}

问题

  上网找了一系列的文章都没解决,后来仔细观察研究发现是database多了个空格,正确的该是这样,没想到一个空格浪费了这么多时间

在这里插入图片描述
  信心满满的以为这就万事大吉了,结果一运行发现依然不可以,后又开始检查,最后发现是少了几个依赖

在这里插入图片描述
发现没有引入commons-pool2依赖,加上了依赖之后再运行发现已经切换了
在这里插入图片描述

commons-pool 对象池

  引入Commons Pool对象池,用于缓存Redis连接的原因是因为Lettuce本身是基于Netty的异步驱动,在异步访问时并不需要创建连接池,但基于Servlet模型的同步访问时,连接池是有必要的。目的是为了复用对象,以减少创建对象的开销,所以一定记得要加这个依赖。


/*** Creates an instance that can be served by the pool and wrap it in a* {@link PooledObject} to be managed by the pool.** @return a {@code PooledObject} wrapping an instance that can be served by the pool** @throws Exception if there is a problem creating a new instance,*    this will be propagated to the code requesting an object.*/PooledObject makeObject()throws Exception;/*** Destroys an instance no longer needed by the pool.* <p>* It is important for implementations of this method to be aware that there* is no guarantee about what state <code>obj</code>will be in and the* implementation should be prepared to handle unexpected errors.* </p> * <p>* Also, an implementation must take in to consideration that instances lost* to the garbage collector may never be destroyed.* </p>** @param p a {@code PooledObject} wrapping the instance to be destroyed** @throws Exception should be avoided as it may be swallowed by*    the pool implementation.** @see #validateObject* @see ObjectPool#invalidateObject*/void destroyObject(PooledObject p)throws Exception;/*** Ensures that the instance is safe to be returned by the pool.** @param p a {@code PooledObject} wrapping the instance to be validated** @return <code>false</code> if <code>obj</code>is not valid and should*        be dropped from the pool, <code>true</code>otherwise.*/boolean validateObject(PooledObject p);/*** Reinitializes an instance to be returned by the pool.** @param p a {@code PooledObject} wrapping the instance to be activated** @throws Exception if there is a problem activating <code>obj</code>,*    this exception may be swallowed by the pool.** @see #destroyObject*/void activateObject(PooledObject p)throws Exception;/*** Uninitializes an instance to be returned to the idle object pool.** @param p a {@code PooledObject} wrapping the instance to be passivated** @throws Exception if there is a problem passivating <code>obj</code>,*    this exception may be swallowed by the pool.** @see #destroyObject*/void passivateObject(PooledObject p)throws Exception;

注意:
  Jedis 和Lettuce 是Java 操作Redis 的客户端。
在Spring Boot 1.x 版本默认使用的是Jedis ,而在Spring Boot 2.x 版本默认使用的就是Lettuce。
所以如果你用的是1.x版本的话 需要把 RedisConnectionFactory factory 替换为LettuceConnectionFactory lettuceConnectionFactory

在这里插入图片描述

  如果喜欢的话,欢迎 🤞关注 👍点赞 💬评论 🤝收藏  🙌一起讨论你的支持就是我✍️创作的动力!					  💞💞💞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/65374.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebSocket与消息推送

B/S结构的软件项目中有时客户端需要实时的获得服务器消息&#xff0c;但默认HTTP协议只支持请求响应模式&#xff0c;这样做可以简化Web服务器&#xff0c;减少服务器的负担&#xff0c;加快响应速度&#xff0c;因为服务器不需要与客户端长时间建立一个通信链接&#xff0c;但…

Qt中将信号封装在一个继承类中的方法

QLabel标签类对应的信号如下&#xff1a; Qt中标签是没有双击&#xff08;double Click&#xff09;这个信号的&#xff1b; 需求一&#xff1a;若想双击标签使其能够改变标签中文字的内容&#xff0c;那么就需要自定义一个“双击”信号&#xff0c;并将其封装在QLabel类的派生…

Programming abstractions in C阅读笔记:p107-p110

《Programming Abstractions In C》学习第46天&#xff0c;p107-p110&#xff0c;3.1小节——“The concept of interface”&#xff0c;总结如下&#xff1a; 一、技术总结 1.client p108&#xff0c;调用library的program称为client。 2.interface p108&#xff0c;“To do …

马来西亚的区块链和NFT市场调研

马来西亚的区块链和NFT市场调研 基本介绍 参考&#xff1a; https://zh.wikipedia.org/wiki/%E9%A9%AC%E6%9D%A5%E8%A5%BF%E4%BA%9A zz制度&#xff1a;联邦议会制 语言文字&#xff1a; 马来语 民族&#xff1a; 69.4%原住民&#xff08;土著&#xff09;&#xff0c;23.2%…

GPT-NER:使用大型语言模型进行命名实体识别

讲在前面&#xff0c;chatgpt出来的时候就想过将其利用在信息抽取方面&#xff0c;后续也发现了不少基于这种大语言模型的信息抽取的论文&#xff0c;比如之前收集过的&#xff1a; https://github.com/cocacola-lab/GPT4IE https://github.com/RidongHan/Evaluation-of-ChatG…

Stable Diffusion教程(9) - AI视频转动漫

配套抖音视频教程&#xff1a;https://v.douyin.com/UfTcrcJ/ 安装mov2mov插件 打开webui点击扩展->从网址安装输入地址&#xff0c;然后点击安装 https://github.com/Scholar01/sd-webui-mov2mov 最后重启webui 下载模型 从国内liblib AI 模型站下载模型 LiblibAI哩…

windows安装apache-jmeter-5.6.2教程

目录 一、下载安装包&#xff08;推荐第二种&#xff09; 二、安装jmeter 三、启动jmeter 一、下载安装包&#xff08;推荐第二种&#xff09; 1.官网下载&#xff1a;Apache JMeter - Download Apache JMeter 2.百度云下载&#xff1a;链接&#xff1a;https://pan.baidu.…

如何查询多级菜单(采用递归的方法)

应用场景 1.京东 京东的页面就是这么显示的在家用电器下面有电视.空调.洗衣机然后再电视下面又有全面屏电视.教育电视等等 2.我们的后端管理系统 我们后端在页面上显示的很多也是通过层级目录的显示出来。 如何实现 1.准备数据库 我们这里parent_id为0的为我们的一级菜单 …

python_day19_正则表达式

正则表达式re模块 导包 import res "python java c c python2 python python3"match 从头匹配 res re.match("python", s) res_2 re.match("python2", s) print("res:", res) print(res.span()) print(res.group()) print("…

Java 成功实现通过网址URL截图保存

Java 实现通过网址URL截图 1.DjNativeSwing方式 &#xff08;不好用&#xff09;2.phantomjs方式 &#xff08;截图还是有瑕疵&#xff09;3.selenium方式 &#xff08;满意&#xff0c;成功实现&#xff09;maven 引入下载相关浏览器chrome下载相关浏览器chromedriver驱动后端…

ElasticSearch学习

一&#xff0c;简介 ES&#xff08;elaticsearch简写&#xff09;&#xff0c; Elasticsearch是一个开源的高扩展的分布式全文检索引擎&#xff0c;它可以近乎实时的存储、检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;处理PB级别的数据…

9-数据结构-栈(C语言版)

数据结构-栈&#xff08;C语言版&#xff09; 目录 数据结构-栈&#xff08;C语言版&#xff09; 1.栈的基础知识 1.入栈&#xff0c;出栈的排列组合 情景二&#xff1a;Catalan函数&#xff08;计算不同出栈的总数&#xff09; 2.栈的基本操作 1.顺序存储 (1)顺序栈-定义…