我们不太确定我们是否正确应用Jedis池以使用Spring bean实现Jedis线程安全
<bean id="redisOnlineManager" class="com.app.online.RedisOnlineManager>
<property name="pool">
<bean class="redis.clients.jedis.JedisPool">
<constructor-arg value="redis://localhost:1234/1" />
</bean>
</property>
private JedisPool pool;
public void setPool(JedisPool pool) {
this.pool = pool;
}
private boolean exists(String key) {
Jedis jedis = pool.getResource();
try {
return jedis.exists(key);
} finally {
jedis.close();
}
}
我们是否正确实施了Jedis池?这段代码执行线程安全的Jedis吗?如果没有,我们应该如何使用spring bean来使jedis线程安全?
请指教..谢谢
答案 0 :(得分:0)
他想说的是在spring singleton bean Or class with static method
中创建用于访问池的池。如果你做其中任何一个,你应该没事。您在代码中所做的是您正在为ResourceManager的每个实例创建一个池,它可以像下面这样进行改进。
@Scope("singleton")
public class ResourceManager {
private JedisPool pool ;
public ResourceManager(){
pool = new JedisPool(new JedisPoolConfig(), "localhost");
}
private boolean exists(String key) {
Jedis jedis = pool.getResource();
try {
return jedis.exists(key);
} finally {
jedis.close();
}
}
}
您的应用程序上下文不具有内部bean。
<bean id="redisOnlineManager" class="com.app.online.RedisOnlineManager/><!-- you dont need this in the application context if you are using annotations -->