Redis卡死问题

我在Jfinal项目中添加了Redis插件,然后开了3个定时器同时使用Redis.use().getJedis方法获取jedis实例,但是最终只有一个定时器在正常运行,其它两个定时器均卡死在getJedis这一步,请问如何解决?

另外如果直接使用cache进行Redis则会报序列化错误,是否需要引入其他jar包呢?

评论区

JFinal

2017-06-07 16:50

卡死问题很可能是网络连接问题,也或者是服务器连不上的事,要引入的 jar 包在首页的 jfinal-3.1-all.zip 中有文件都有过说明

没蓝开打

2017-06-07 17:03

网络连接问题不太可能吧,其中一个定时器一直在运行的。而且我进debug模式,在定时器开始的时候打上一个断点,有一个时间差以后第二个定时器也是可以正常运行的。我怀疑是同时3个定时器调用cache.getJedis方法导致了卡死。。

杜福忠

2017-06-07 19:32

@没蓝开打 我是才学的, 用了很多线程去跑也没有这个情况啊,
大概1分钟左右就完事了
http://www.jfinal.com/share/299

陈佳

2017-06-08 16:13

卡死,是不是jed连接个数限制了,所以才会卡死.

没蓝开打

2017-06-10 14:52

使用try catch 抓cache.getJedis()的异常 会捕捉到空指针异常,定时器再重新运行时是正常的,原因可能有2个,一是第一次运行时Redis插件尚未加载完毕,第二有可能连接数达到上限。但是Jfinal初始化的时候控制连接数的的JedisPoolConfig类是封装好的= =

没蓝开打

2017-06-10 15:00

@没蓝开打 连接数可以用RedisPlugin.getJedisPoolConfig()方法获取再设置,定时器开始时可以增加一个cache是否为空的判断。

JFinal

2017-06-11 16:18

@没蓝开打 对的,通过 getJedisPoolConfig() 可以进行很多设置

perlin

2019-01-23 17:24

jedis实例使用完毕后,记得close。Redis.use().getJedis().flushAll();忘记关闭了。我说redis怎么总是卡死。

热门反馈

扫码入社