- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 jedis 连接到 redis 服务器。 Redis ip 值配置在一个单独的文件中,我试图在初始化期间加载该文件
private static JedisPool pool;
public static void initRedisClient() throws Exception {
String redisConfigPath = "/conf/redis.properties";
Properties docsRedisProp = RedisUtils.loadProperties(redisConfigPath);
pool = new JedisPool(docsRedisProp.getProperty("redisserver"));
}
}
而我的mget
从redis中获取多个key的方法如下
public static List<String> mgetDataFromRedisCache(String[] keys) throws CacheException {
Jedis jedisCon = null;
try {
jedisCon = getJedis();
jedisCon.select(1);
return jedisCon.mget(keys);
} catch (Exception e) {
LOGGER.warning("Exception while fetching data from Redis Client. EXCEPTION=" + e.getMessage());
e.printStackTrace();
} finally {
if (jedisCon != null) {
returnJedis(jedisCon);
}
}
return null;
}
当我在属性文件中提供了不正确的 ip 值时 - 访问它的请求线程正在等待很长一段时间。我的请求不应因池中资源不可用而停止。
我在这里附加了停滞线程的线程转储(即处于等待状态的线程)
###_http-nio-8443-exec-140" #104908 daemon prio=5 os_prio=0 tid=0x00007f247805f000 nid=0x4266 waiting on condition [0x00007f220a4df000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000006fe438408> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at org.apache.commons.pool2.impl.LinkedBlockingDeque.takeFirst(LinkedBlockingDeque.java:524)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:438)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:361)
at redis.clients.util.Pool.getResource(Pool.java:40)
at redis.clients.jedis.JedisPool.getResource(JedisPool.java:84)
at com.retail.store.RedisClient.getJedis(RedisClient.java:53)
at com.retail.store.RedisClient.mgetDataFromRedisCache(RedisClient.java:82)
我怎样才能做到这一点?任何帮助深表感谢。提前致谢:-)
最佳答案
redis 服务器 ip 在属性文件中维护,并在运行时加载它。
属性文件包含默认 ip。但是当我在我的开发设置中部署相同的内容时,redis ip 应该已经更改但我错过了这样做。我的开发设置无法连接给定的 ip。
Jedis有以下默认配置
maximimum active connections = 8
readtimeout = 2000
Maximum active connections
是池可以同时容纳的最大 Activity 连接数。
read time out
是在建立连接并准备好通过已建立的连接接收数据时设置的最长时间(以毫秒为单位)。
在我们的例子中,连接没有建立(对于前 8 个线程)并且它永远不会被终止 - 连接是 timeout 没有为这些连接设置。使 get
调用 redis 的其他线程现在进入停放 WAIT
状态。
通过设置以下池配置(即设置建立连接的最大等待时间)我们可以避免线程进入长时间等待状态
JedisPoolConfig jedisConfig = new JedisPoolConfig();
jedisConfig.setMaxWaitMillis(maxWaitInMillis);
关于java - 从 JedisPool 获取资源时线程处于等待状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44780577/
我正在使用jedis 客户端 将redis 与ofbiz 集成。 不同的应用程序正在使用一个 redis 服务器。我的问题是 默认情况下,JedisPool 将保持多少个连接。 如果我创建多个 Jed
我在生产环境中使用 jedisPool。当我启动服务器处理请求时,redis 池工作正常。但过了一会儿,日志文件开始告诉我:“JedisException:无法从池中获取资源。” 这是我的配置: re
我是 Redis 新手,在我的多线程应用程序中使用 JedisPool。 JedisPoolConfig config = new JedisPoolConfig(); config.setMax
我有一个创建 jedispool 的函数, final JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.s
我很困惑:用法:try(Pipeline pipeline = jedisPool.getResource().pipelined())它会关闭管道和jedis实例吗?或者只是关闭管道? 我在多线程中
这可能很简单,但我无法在任何地方找到答案(在包含的代码库中)。 我有一个简单的 Redis 部署,主 + 从。我应该如何配置 JedisPool 以使用 master 进行写入并使用 slave/ma
我正在使用 jedis 连接到 redis 服务器。 Redis ip 值配置在一个单独的文件中,我试图在初始化期间加载该文件 private static JedisPool pool; publi
我在这里尝试创建新的 JedisPool,但出现以下错误。 The constructor JedisPool(GenericObjectPool$Config, String, int, int)
我的应用程序使用 AWS 上的 ElastiCache 进行缓存。我们当前的设置使用基本的 Redis 集群,没有分片或故障转移。我们现在需要迁移到启用了分片、故障转移等的集群 Redis 弹性缓存。
我在我的 spark 流应用程序中使用 sparkContext.broadcast 来共享 redis 连接池 (JedisPool)。 代码如下: lazy val redisPool = {
这是我的JedisFactory import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; c
我的redis服务器在一个VMWare服务器中,我可以通过cli从telnet连接redis服务器: C:\Users\Administrator>redis-cli -h 192.168.0.243
查看 redis client list 的输出,我看到目前有 600 个活跃的客户端,并且还在继续增长。这是一个输出片段: id=285316 addr=x.x.x.x:55699 fd=14131
我刚刚开始在我的 Play 应用程序中使用 Redis,它运行良好。查看我在 Internet 上找到的一些示例,我想知道以下两个代码片段之间有什么区别: import redis.clients.j
我正在使用 Spring Boot 应用程序实现 Redis Jedis。我正在使用以下依赖项和配置。在执行此操作时,我收到错误“考虑在配置中定义“redis.clients.jedis.JedisP
我是一名优秀的程序员,十分优秀!