Java SpringBoot项目的Redis最大活动配置值

Java SpringBoot项目的Redis最大活动配置值,java,spring,spring-boot,redis,Java,Spring,Spring Boot,Redis,我已经为Spring boot应用程序实现了redis 我应该为application.properties中的以下配置输入什么值 # <!-- Maximum active connections to Redis instance --> spring.redis.pool.max-active=8 # spring.redis.pool.max active=8 文档中默认为8 然后,我将其设置为1,并使用多个调用测试,这些调用会命中redis repo。虽然我预计会出现一

我已经为Spring boot应用程序实现了redis

我应该为application.properties中的以下配置输入什么值

# <!-- Maximum active connections to Redis instance -->
spring.redis.pool.max-active=8
#
spring.redis.pool.max active=8
文档中默认为8

然后,我将其设置为1,并使用多个调用测试,这些调用会命中redis repo。虽然我预计会出现一个错误,即redis连接不可用,但我没有收到任何错误

我错过了什么

更新问题:

正如下面提到的MP911D,我在rest控制器方法中添加了@Transactional,并让线程等待10秒

使用启用了@Transactional的Spring Data Redis时 从第一次Redis访问到事务处理,连接都是绑定的 已提交/回滚

我已将spring.redis.pool.max-active设置为1,然后调用另一个rest api方法,该方法在第一次rest调用仍处于等待状态时使用redis。因此,在这种情况下,我想获取连接不可用异常,对吗?

简而言之 这取决于你打算做什么

解释 一个好的值是应用程序中最大并发请求数的50%到100%。Redis连接仅在非事务模式下的Redis操作期间租用

您需要在类路径上有
commons-pool2
池设置才能生效。早期版本的绝地/Spring Boot不需要
commons-pool2

在启用了
@Transactional
的情况下使用Spring Data Redis时,连接从第一次Redis访问开始绑定,直到事务提交/回滚


如果max并发线程的数量似乎过高,并且您不使用事务/阻塞操作,那么您可能需要查看集成。莴苣只需要一个连接,但它需要更多的依赖项,您需要自己配置
RedisConnectionFactory

您没有遗漏任何东西,真的-MP911D在解释这一点时做得很好。“最大活动限制”仅限制可同时活动的连接数-在连接可用之前,所有其他请求线程都将被阻止


至于您应该允许的最大连接数,这实际上取决于您的用例和您的Redis服务器。但一般来说,对于RDBMS系统(和Redis应该没有太大区别)来说,20左右是一个合理的限制-请参阅以获得进一步的解释。不过,你不应该事先设定一个很大的限制。始终通过负载和性能测试来证实您的决定。

RDBMS比较不适用。Redis主要是内存存储。读取数据只发生在内存中,因此没有主轴计数(HDD)要考虑。写操作可能会影响磁盘访问,但在几乎所有情况下都不会,因为I/O是异步的,数据首先写入内存。我认为这是言过其实的说法,因为它实际上取决于数据集的大小—对于大多数数据库、Redis或RDBMS,数据集可以很容易地放入内存,特别是看到有很多内存的机器是多么的便宜。因此读取性能应该是可比的(当然,Redis通常会有不同的用例,因此读取速度更快,但不会达到几个数量级)。还有,硬盘主轴数?真的吗?:)HDD一次只能做一件事,《Hikari CP指南》中包含了一个如何确定池大小的公式(由PostgreSQL支持),所以这就是我的出发点,为什么你不能将Redis与传统的RDBMS进行比较,是的,但这个公式已经过时了——谁还会使用HDD?如果你注意到了,这篇文章指出SSD背后有相反的逻辑——你应该减少连接数量,而不是增加连接数量。这就是我提到那篇文章的基本原因——他们在文章中所说的一切或多或少也适用于Redis。实际上,我并没有将commons-pool2库作为依赖项。在这种情况下,spring.redis.pool.max-active的默认值是多少?没有池?没有池!实际上,我确实有commons-pool2可供SpringBootStarter redis依赖项工件使用。你能看看我的更新问题部分并给出你的答案吗?我想Redis没有回滚功能。