Jedis不是线程安全的,那么使用时为什么没有出现线程安全问题?
直接看官网即可:Jedis wiki
要保证线程安全且获得较好的性能。能够使用JedisPool。JedisPool是一个连接池,既能够保证线程安全,又能够保证了较高的效率。
JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");
使用JedisPool来获得一个Jedis实例的方法例如以下:
/// Jedis implements Closeable. Hence, the jedis instance will be auto-closed after the last statement.
try (Jedis jedis = pool.getResource()) {
/// ... do stuff here ... for example
jedis.set("foo", "bar");
String foobar = jedis.get("foo");
jedis.zadd("sose", 0, "car"); jedis.zadd("sose", 0, "bike");
Set<String> sose = jedis.zrange("sose", 0, -1);
}
/// ... when closing your application:
pool.close();
上面的程序首先通过pool.getResource()
获得一个Jedis实例。然后利用这个Jedis实例向Redisserver发送相关的指令操作,最后调用Jedis类的close
方法。将这个Jedis实例归还给JedisPool。