gpt4 book ai didi

java - jedis哨兵池中多个jedis连接的使用

转载 作者:IT王子 更新时间:2023-10-29 06:13:06 25 4
gpt4 key购买 nike

我正在 spring web 应用程序中实现 jedis。
我需要知道我应该从池资源中获取一次绝地武士并每次在 Controller 中使用它,还是应该在每次调用 Controller 时从池中获取新的绝地武士并再次关闭它。
当我浏览文档时,我们不应该在多线程环境中使用相同的 jedis 连接,所以问题出现了,我们应该在 Controller 中获取 jedis 连接形式的资源池,或者我们应该使用在 spring 服务中创建的

配置在应用上下文中

<bean id="jedisService" class="com.til.ibeat.service.JedisService">
</bean>

Spring Controller

<bean id="cacheRedisController" class="com.controller.CacheControllerRedis">
<property name="jedisService"><ref bean="jedisService"/> </property>
</bean>

jedis服务中的代码

int database = 0;
JedisPoolConfig poolConfig = new JedisPoolConfig();
// poolConfig.setMaxActive(1000);
poolConfig.setMaxIdle(10);
poolConfig.setMinIdle(1);
// poolConfig.setMaxWait(30000);
poolConfig.setNumTestsPerEvictionRun(10);
poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnReturn(true);
poolConfig.setTestWhileIdle(true);
poolConfig.setTimeBetweenEvictionRunsMillis(30000);
int timeout = 300;
pool = new JedisSentinelPool(Config.REDIS_PROD_USER, Config.CONNECTION_REDIS, poolConfig, timeout, Config.REDIS_PROD_USER_PASSWORD,
database);
try {
jedis = pool.getResource();
// Socket socket = jedis.getClient().getSocket();
// System.out.println("Connected to " + socket.getRemoteSocketAddress());

} catch (JedisException e) {
e.printStackTrace();
} finally {
if (jedis != null) {
jedis.close();
pool.destroy();
}
}

最佳答案

你应该创建一次池,每次都从池中获取新的 Jedis 进行操作,然后再次关闭它。

Pool 是您的资源管理器。您不应该一遍又一遍地创建它。池应该创建一次并(重新)用于获取资源,特别是在多线程环境中。

Jedis 是您的资源。您应该在每次操作之前获取它并在之后返回(关闭)它。尽量避免在获得一个资源(Jedis)后进​​行多次操作,因为这会导致资源共享不平衡。

因此,对于您的应用程序:

// Do this once, may be at the beginning of application
pool = new JedisSentinelPool(...);

// For every operation
jedis = pool.getResource();
// Do your operation(s)
jedis.close();

// Once, at the end of application
pool.destroy();

关于java - jedis哨兵池中多个jedis连接的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49517590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com