5

我必须按需为每个请求(写入/读取)创建 RedisTemplate。连接工厂是 JedisConnectionFactory

JedisConnectionFactory factory=new 
    JedisConnectionFactory(RedisSentinelConfiguration,JedisPoolConfig);

有一次,我对 RedisTemplate.opsForHash/opsForValue 进行操作,如何安全地处理模板,从而将连接返回到 JedisPool。

截至目前,我这样做

template.getConnectionFactory().getConnection().close();

这是正确的方法吗?

4

1 回答 1

5

RedisTemplate根据提供的配置,从 获取连接RedisConnectionFactory并断言它已返回到池中,或在命令执行后正确关闭。(参见:JedisConnection#close()

通过手动关闭连接getConnectionFactory().getConnection().close();将获取新连接并立即关闭它。

因此,如果您想获得更多控制权,您可以获取连接,执行一些操作并稍后关闭它

RedisConnection connection = template.getConnectionFactory().getConnection();
connection... // call ops as required
connection.close();

RedisTemplate.execute(...)与 一起使用RedisCallback,这样您就不必担心获取和返回连接。

template.execute(new RedisCallback<Void>() {

  @Override
  public Void doInRedis(RedisConnection connection) throws DataAccessException {
    connection... // call ops as required
    return null;
  }});
于 2015-03-03T07:21:02.620 回答