Spring豆线是否对Jedis安全?

时间:2017-03-30 16:14:53

标签: java spring thread-safety jedis

我们不太确定我们是否正确应用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线程安全?

请指教..谢谢

1 个答案:

答案 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 -->