redis设置database 不生效剖析

这篇具有很好参考价值的文章主要介绍了redis设置database 不生效剖析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

redis设置database 不生效剖析,# Spring,数据库,redis,缓存,database,运维

主页传送门:📀 传送

前言

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

配置

redis设置database 不生效剖析,# Spring,数据库,redis,缓存,database,运维

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

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多了个空格,正确的该是这样,没想到一个空格浪费了这么多时间

redis设置database 不生效剖析,# Spring,数据库,redis,缓存,database,运维
  信心满满的以为这就万事大吉了,结果一运行发现依然不可以,后又开始检查,最后发现是少了几个依赖

redis设置database 不生效剖析,# Spring,数据库,redis,缓存,database,运维
发现没有引入commons-pool2依赖,加上了依赖之后再运行发现已经切换了
也可以引入lettuce-core 依赖

<!-- lettuce-core -->
<dependency>
    <groupId>io.lettuce.core</groupId>
    <artifactId>lettuce-core</artifactId>
</dependency>

redis设置database 不生效剖析,# Spring,数据库,redis,缓存,database,运维

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
同时在依赖中排除lettuce的jar 改为用jedis

redis设置database 不生效剖析,# Spring,数据库,redis,缓存,database,运维

对比

  commons-pool2lettuce-core 都是在处理 Redis 连接池方面常用的依赖,但它们有不同的设计和适用场景,因此在选择使用哪个依赖时需要根据具体情况进行权衡。

  commons-pool2 是 Apache Commons 项目中的一个组件,用于实现通用的对象池。它不仅仅适用于 Redis 连接池,还可以用于其他对象的池化管理。commons-pool2 的设计比较通用,允许你管理任意类型的对象池,因此可以更灵活地适应不同的场景。如果你的项目需要管理多个类型的对象池,或者你希望在 Redis 之外使用对象池功能,那么选择 commons-pool2 是一个不错的选择。

  另一方面,lettuce-core 是一个专门为 Redis 设计的客户端库。它提供了丰富的功能和性能优化,专注于提供高效的 Redis 连接和操作。lettuce-core 自带了连接池的功能,你可以使用它内置的连接池来管理 Redis 连接,无需额外的依赖。

所以,选择使用 commons-pool2 还是 lettuce-core 取决于你的项目需求:

  • 如果你只需要管理 Redis 连接池,而不需要通用的对象池功能,那么使用 lettuce-core 内置的连接池可能更为方便和简洁。
  • 如果你的项目需要管理多个类型的对象池,或者需要在其他场景中使用对象池,那么 commons-pool2 提供的通用对象池功能可能更适合。

redis设置database 不生效剖析,# Spring,数据库,redis,缓存,database,运维文章来源地址https://www.toymoban.com/news/detail-659645.html

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

到了这里,关于redis设置database 不生效剖析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据库(database)相关操作

    修改my.ini配置文件,可修改MySQL默认的字符集. 修改[mysql]选项组下的default_character_set的值可以同时改变character_set_client, character_set_connection, character_set_database的值 修改[mysql]选项组下的character_set_server的值可同时改变character_set_database, character_set_server的值 在MySQL命令行通过以下命令

    2024年02月05日
    浏览(52)
  • create database创建数据库失败

    瀚高数据库 目录 环境 症状 问题原因 解决方案 环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:4.5.7 症状 1、执行如下sql语句创建数据库报错。 问题原因 1、初始化数据库的时候指定了参数locale、lc-collate、lc-ctype、lc-messages的值为’C’,即数据库默认模板template1对应这些

    2024年02月17日
    浏览(58)
  • 在Spring中,可以使用不同的方式来实现分布式锁,例如基于数据库、Redis、ZooKeeper等

    在Spring中,可以使用不同的方式来实现分布式锁,例如基于数据库、Redis、ZooKeeper等。下面是两种常见的实现方式: 使用Redis实现分布式锁: 使用自定义注解实现本地锁: 以上是两种常见的在Spring中实现分布式锁的方式。第一种方式使用Redis作为分布式锁的存储介质,通过

    2024年03月17日
    浏览(46)
  • MySQL创建数据库(CREATE DATABASE语句)

     在 MySQL 中,可以使用  CREATE DATABASE  语句创建数据库,语法格式如下: [ ] 中的内容是可选的。语法说明如下: 数据库名: 创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文件夹命名规则,不能以数字开头,尽量

    2024年02月04日
    浏览(53)
  • IDEA使用-通过Database面板访问数据库

    作为一款强大IDE工具,IDEA具有很多功能,本文将以MariaDB数据库访问为例,详细介绍如何通过IDE工具的Database面板来访问数据库。 不同的版本操作会略有差异,这里我们用于演示的版本为: IntelliJ IDEA 2018.3.5 (Ultimate Edition) mariadb-java-client2.7.3 按照如下过程,我们来通过IDE工具的

    2024年02月06日
    浏览(38)
  • MySQL示例数据库(MySQL Sample Databases) 之 sakila数据库

    官方示例数据介绍 MySQL 官方提供了多个示例数据库,在MySQL的学习、开发和实践中具有非常重要的作用,能够帮助初学者更好地理解和应用MySQL的各种功能和特性。 官方示例数据具体列表如下: 这些数据库都可以通过如下官方网址进行下载和安装 sakila数据库 可以在MySQL官方

    2024年02月05日
    浏览(54)
  • IDEA自带的Database连接达梦数据库

    达梦数据库无法使用Navicat,只能使用自带的数据库管理工具,但是非常难用,所以想使用IDEA自带的Database连接达梦数据库。 首先下载达梦jdbc驱动包 选择Driver 确定达梦驱动 从datasource选择达梦数据库 填写数据源信息 上面的URL就是jdbc连接的url。 点击测试连接 成功,即可连接

    2024年02月13日
    浏览(49)
  • Hive(14):Database|schema(数据库) DDL操作

    1 Create database Hive中DATABASE的概念和RDBMS中类似,我们称之为数据库。在Hive中, DATABASE和SCHEMA是可互换的,使用DATABASE或SCHEMA都可以。 COMMENT:数据库的注释说明语句 LOCATION:指定数据库在HDFS存储位置,默认/user/hive/warehouse WITH DBPROPERTIES:用于指定一些数据库的属性配置。 下面

    2024年02月11日
    浏览(61)
  • MySQL示例数据库(MySQL Sample Databases) 之 world_x数据库

    官方示例数据介绍 MySQL 官方提供了多个示例数据库,在MySQL的学习、开发和实践中具有非常重要的作用,能够帮助初学者更好地理解和应用MySQL的各种功能和特性。 官方示例数据具体列表如下: 这些数据库都可以通过如下官方网址进行下载和安装 world_x数据库 MySQL官方网站提

    2024年02月02日
    浏览(54)
  • idea设置自动编译spring boot代码,idea代码修改后无须重启服务立即生效

    系统环境:windows 10 idea版本:IntelliJ IDEA 2022.2.3 (Ultimate Edition) springBoot版本:2.2.6.RELEASE 在Spring Boot开发应用程序时,需经常要进行频繁的代码修改和调试。 为了更好的提高开发效率,希望能够自动编译和热更新应用程序,以便我们在修改代码后无需手动多次进行重新启动应用

    2024年04月13日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包