我已经为Spring启动应用程序实现了redis。
我应该在application.properties中为以下配置输入什么值?
# <!-- Maximum active connections to Redis instance -->
spring.redis.pool.max-active=8
文档中默认为8。
然后,我将其设置为1并使用多次调用进行测试,这些调用将命中redis repo。虽然我期待一个错误说,redis连接不可用,但我没有收到任何错误。
我在这里缺少什么?
更新问题:
正如下面提到的mp911de,我在我的rest控制器方法中添加了@Transactional并让线程等待10秒。
在启用@Transactional时使用Spring Data Redis时, 连接从第一个Redis访问绑定到事务 承诺/回滚。
我已将spring.redis.pool.max-active设置为1,然后调用另一个使用redis的rest api方法,而第一次rest调用仍处于等待状态。所以在这种情况下,我想连接不可用的例外吗?
答案 0 :(得分:3)
这取决于你计划做什么。
良好的值是应用程序中最大并发请求数的50%到100%。 Redis连接仅在非事务模式下Redis操作期间租用。
您需要在类路径上使用commons-pool2
池设置才能生效。早期版本的Jedis / Spring Boot不需要commons-pool2
。
将Spring Data Redis与启用的@Transactional
一起使用时,连接将从第一个Redis访问绑定,直到提交/回滚事务为止。
如果最大并发线程数看起来不合理,并且您不使用事务/阻塞操作,那么您可能需要查看lettuce driver集成。生菜只需要一个连接,但它需要更多的依赖性,你需要自己配置RedisConnectionFactory
。
答案 1 :(得分:0)
你没有遗漏任何东西,真的 - mp911de很好地解释了这一点。最大活动限制仅限制可以同时处于活动状态的连接数 - 所有其他请求线程将被阻塞,直到连接可用。
至于您应该允许的最大连接数 - 这实际上取决于您的用例和Redis服务器。但一般来说,对于RDBMS系统(和Redis应该没那么大的不同),20左右是合理的限制 - 请参考this link进一步解释。但是,你不应该提前设定一个大的限制。始终通过负载和性能测试来证实您的决定。