首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该总是在业务逻辑的末尾调用jedis实例的close吗?

我应该总是在业务逻辑的末尾调用jedis实例的close吗?
EN

Stack Overflow用户
提问于 2021-06-13 18:14:54
回答 2查看 246关注 0票数 0

我用jedis作为带有弹簧引导的红线连接。

jedis池配置如下:

代码语言:javascript
复制
@Configuration
@ConditionalOnClass(JedisPool.class)
@EnableConfigurationProperties(JedisProperties.class)
public class JedisAutoConfiguration {
    private JedisProperties jedisProperties;
    
    public JedisAutoConfiguration(JedisProperties jedisProperties) {
        this.jedisProperties = jedisProperties;
    }
    
    @Bean
    @ConditionalOnMissingBean(JedisPool.class)
    public JedisPool jedisPool() {
        
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxIdle(jedisProperties.getPool().getMaxIdle());
        poolConfig.setMaxTotal(jedisProperties.getPool().getMaxTotal());
        poolConfig.setMaxWaitMillis(jedisProperties.getPool().getMaxWaitMillis() * 1000);
        
        JedisPool jedisPool = new JedisPool(poolConfig, jedisProperties.getHost(), jedisProperties.getPort(),
                jedisProperties.getTimeout()*1000, jedisProperties.getPassword(), 0);
        return jedisPool;
    }
}

每次我需要连接到redis时,我都会从jedis池租一个资源:

代码语言:javascript
复制
@Service
public class UserService   {

    
    @Autowired
    private JedisPool jedisPool;


    public User FindUserFromCache(Integer id){
        Jedis resource  = jedisPool.getResource()
        // business logic

        // resource.close()
    }

}

问题:

1.是否应该在业务逻辑结束时将资源返回到池中?spring引导或java运行时能够自动处理这种情况吗?

2.如果资源不关闭,那么资源就永远不会返回到池中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-14 12:22:15

是否应该在业务逻辑结束时返回资源池?

是。

您也可以使用Java的试用资源特性。

代码语言:javascript
复制
    try (Jedis resource  = jedisPool.getResource()) {
        // business logic
    }

可以自动处理这种情况吗?

JedisPool基于Apache项目,它既不是spring ( commons-pool2 )的一部分,也不是核心java的一部分。因此它们不能/不能自动地处理这种情况。

如果资源未关闭,那么资源将永远不会返回到池中?

准确地说,如果资源是而不是返回的,那么它就永远不会返回到池中。还有其他方法可以将资源返回到池中。但是close()应该是用户友好的方式。

票数 1
EN

Stack Overflow用户

发布于 2021-06-14 12:35:44

与其直接使用Jedis连接池,不如使用RedisTemplate.。

这样,您就不会为释放业务逻辑代码中的Jedis连接资源而烦恼。意味着更好的抽象。

此外,您将来也可以将驱动程序从"Jedis“更改为更新的”生菜“,而无需触及您的业务逻辑。

请参阅这里的更多内容:https://docs.spring.io/spring-data/data-redis/docs/current/reference/html/#redis:template

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67961348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档