我正在使用Jedis在Redis中执行大量的插入/读取。Redis服务器正在使用默认配置。当我开始使用几个线程时,问题出现了,异常情况是:
redis.clients.jedis.exceptions.JedisConnection异常:java.net.Socket异常: Pipe quebrado(写入失败)
我搜索了很多关于这个问题的信息,但找不到问题的原因或解决方法。我用来执行这些测试的代码如下:
public class RedisFacade {
private static RedisFacade instancia = null;
// Initialize the Connection
final JedisPoolConfig poolConfig = buildPoolConfig();
JedisPool pool = new JedisPool(poolConfig, "localhost");
Jedis jedis;
int i = 0;
private RedisFacade() {
}
public static RedisFacade getInstancia() {
if (instancia == null) {
instancia = new RedisFacade();
}
return instancia;
}
// retorna um cliente jedis da pool
public Jedis getDB() {
if (jedis == null) {
jedis = pool.getResource();
}
return jedis;
}
//inserting
public void insert(Document d) {
String key = i + d.getString("date") + d.getString("time");
String value = d.toString();
this.getDB().set(key, value);
i++;
}
//reading
public void read(String date, String time) {
Object doc = this.getDB().get(i + date + time);
i++;
System.out.println(doc);
}
public void destroyPool() {
this.pool.destroy();
}
private JedisPoolConfig buildPoolConfig() {
final JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(1100);
poolConfig.setMaxIdle(16);
poolConfig.setMinIdle(16);
poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnReturn(true);
poolConfig.setTestWhileIdle(true);poolConfig.setMinEvictableIdleTimeMillis(Duration.ofSeconds(60).toMillis());
poolConfig.setTimeBetweenEvictionRunsMillis(Duration.ofSeconds(30).toMillis());
poolConfig.setNumTestsPerEvictionRun(3);
poolConfig.setBlockWhenExhausted(true);
return poolConfig;
}}
在尝试为池和客户端实现新构造函数、新配置后,我尝试了一种简单的方法来解决这个问题:关闭从池中获取的资源。为此,我更改了以下代码:
public Jedis getDB() {
jedis = pool.getResource();
return jedis;
}
//cria um _id pra ser usado novamente quando for buscar os documentos
public void insert(Document d) {
String key = "key" + i;
String value = d.toString();
Jedis jedis = this.getDB();
jedis.set(key, value);
jedis.close();
i++;
}
//busca pelo _id
public void read() {
Jedis jedis = this.getDB();
Object doc = jedis.get("key" + i);
jedis.close();
i++;
System.out.println(doc);
}
更改代码后,我计划的服务开始工作,所以我接受这个解决方案。
似乎是超时问题。
查看以下线程:配置绝地超时
还有这个讨论:https://github.com/xetorthio/jedis/issues/185
所以我会尝试用超时参数实例化Jedispool
(即https://github.com/xetorthio/jedis/blob/master/src/main/java/redis/clients/jedis/JedisPool.java#L201,但还有许多其他构造函数)
在redis中设置CONFIG SET timeout 600
(例如10分钟超时)。
超时似乎以毫秒为单位。
游泳指标可以帮您分析每次的游泳训练,并长期追踪您的表现和进步。该指标记录了您的游出距离、时间和速度、划水频率,还可以辨别您的游泳风格。另外,有了SWOLF分数,您可以提高游泳技术。 如需获取最准确的信息,请确保您已经对佩戴 M600 的手作了设定。该设定可以在Polar Flow应用程式中Devices(设备) > Polar M600下进行,或在Polar Flow网络服务中您的姓名/简介图片
我有一个非常奇怪的问题,我希望你的眼睛能帮助解决它。 我定义了一个函数,它通过BASH连接到Oracle SQL数据库。连接后,我使用一个herdeoc传入一个简单的select语句,该语句查找最大订阅id并递增它,具体取决于函数被调用的次数。代码如下: 在命令行调用函数时,上述代码非常有效: 但是,当函数通过管道传输到AWK语句时,函数不再抖动,这毫无意义!请参阅下面的输出: 我不明白。哈哈,我
问题内容: 在使用selenium(没有远程,没有xvfb)运行django测试时,我总是得到以下异常: 使用django 1.4和带有Firefox WebDriver的seleniumpython-bindings 2.28.0在LiveServerTestCase上运行测试。有人对如何解决有想法吗? 问题答案: 确保请求页面的浏览器正在等待响应。 如果我没记错的话,有和命令,请确保您正在使用
传递参数 链接管道 我们可以将多个管道连接在一起,以便在一个表达式中使用多个管道。
我正在对一个由zuul代理服务支持的简单Spring云应用程序进行一些压力测试。由于Zuul和服务之间的旧连接,我们偶尔会出现管道异常。我使用不同的配置选项配置Zuul,但没有成功: 例外情况如下: 通用域名格式。netflix。祖尔。例外ZuulException:组织转发错误。springframework。云netflix。祖尔。过滤器。路线RibbonRoutingFilter。转发(Ri
我们将我们的集群迁移到Cassandra 1.2(从1.1.7),并尝试在迁移后运行修复(我们按照建议定期运行它们)。 由于SSTable版本不同,修复失败,因此我们使用和并重试。 但是,修复失败了,但有这个例外: 我们还注意到,在死亡之前,< code>nodetool netstats显示了奇怪的统计数据(表传输为756845%...). 编辑 这似乎是压缩SSTables传输的问题,我将尝试