问题
I am using Jedis to connect with a Redis server in a REST service.
When I am calling the web service I want to do operations like jedis.hmget , jedis.exits and hgetALL.
For example:
jedis.hmget("employee:data:" + emp_user_id, "employee_id").get(0);
The configuration that I am using for Redis is:
Jedis jedis;
JedisShardInfo shardInfo;
@PostConstruct
public void init() {
try {
shardInfo = new JedisShardInfo(Config.getRedisHost(), Config.getRedisPort());
shardInfo.setPassword(Config.getRedisPassword());
jedis = new Jedis(shardInfo);
jedis.select(2);
//jedis.se
} catch (Exception e) {
logger.error("Exception in init ------- > " + e);
}
}
I know that Jedis is NOT thread safe. When I am using 1000 threads at once to call the service at that time I am getting an exception as Unexpected end of stream. I want to know Jedis pool is thread safe? Unable to find a specific solution for it.
Thanks. Any Help would be appreciated.
回答1:
JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost", portno, 10000,
"password");
See here: https://github.com/xetorthio/jedis/wiki/Getting-started
回答2:
Check out Spring-data-redis.
When you add a JedisConnectionFactory
you get a connectionFactory which has connection pooling capability by default.
JedisConnectionFactory()
Constructs a new JedisConnectionFactory instance with default settings (default connection pooling, no shard information). See docs.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:use-pool="true" p:host-name="server" p:port="6379"/>
</beans>
For further information, see the documentation.
来源:https://stackoverflow.com/questions/44569901/use-connection-pool-with-jedis