redis 阻塞队列 无法读取数据

cx疯子 发布于 2016/05/12 18:02
阅读 2K+
收藏 0

代码:

PushThread pushThread = new PushThread();
pushThread.setName("PUSH-Thread");
pushThread.start();//每隔20分钟往redis里面放数据

PullThread pullThread = new PullThread();
pushThread.setName("PULL-Thread");
pullThread.start();//使用 rightPop 读取数据


读取的方式:


template.opsForList().rightPop(key,0,TimeUnit.MINUTES);


那么问题来了:阻塞时间过长以后,rightPop不在返回数据,也没有报错。redis队列数据一直增加,不见消费。


在这里怀疑是当前被阻塞的redis连接线程死了,没有得到释放。


接着做测试:同样的代码,连接我本地启动的redis时,现象变成:5分钟以后,抛出异常如下:

 redis.clients.jedis.exceptions.JedisConnectionException: It seems like server has closed the connection.

但是rightPop是继续工作的,不影响返回的数据。

到这里是不是该怀疑redis配置的问题?但是抛出异常也是不正常的情况。因此想求助各位大神,望能解开这一团迷雾,让小子可以开开心心回家.....谢谢啦~

以下是问题补充:

@cx疯子:server端设置了maxidletime(默认是5分钟) (2016/05/12 18:12)
加载中
0
龍sky腾
龍sky腾

问题解决了吗

0
Yveltal
Yveltal

我换成短周期循环来做类似队列的取出功能了,lrange和ltrim联合使用。

死循环中,第一步判断key存不存在,不存在睡眠500ms;存在就用lrange和ltrim,来取出头或者尾的第一个数据。

返回顶部
顶部