我正在帮助维护一个使用Jedis连接到Sharded Redis的应用程序。
我正在使用的应用程序在服务中保留 ShardedJedisPool 的实例,以便在多个请求中重复使用它。
我是reviewing the docs on Sharded Jedis和noticed the following comment:
忘记pool.destroy使连接保持打开状态,直到超时为止 达到。
我们的应用并未在任何地方调用 pool.destroy()。我们应该在每次请求时调用 pool.destroy()吗?我想,在每个请求上都创建一个新池?或者我的游泳池可以在我的服务生命周期内保持活力,并且只能在服务的 finalize 方法中调用 pool.destroy()?
答案 0 :(得分:2)
ShardedJedisPool
和JedisPool
只能在应用程序的整个生命周期内创建一次。并在应用程序关闭时销毁它们。
ShardedJedisPool
和JedisPool
都是线程安全的,这意味着跨线程使用相同的实例是安全的(在您的情况下是请求)并获得ShardedJedis
或{{1}的实例}。在使用ShardedJedis或Jedis之后,您应该将它们返回到池中,否则池将会耗尽(取决于您如何配置它)。