新手问题 Sidekiq 的队列底层是怎么搞的呢

moliliang · 2014年05月25日 · 最后由 moliliang 回复于 2014年05月27日 · 3987 次阅读

sidekiq 是基于 redis 搞的,但是很疑惑,我改了代码后,重启队列后,队列还是会运行以前的代码。。。为什么。。

描述更清楚一些,你放到 Sidekiq 里面的是什么东西,代码可以贴出来看看

你推进队列的对象,包含了该对象当时所有的信息,所以重启后,之前的没有运行完成的任务,会有问题。

如果是新任务,肯定就是新的对象数据和代码了。新任务还有老代码情况的话,你可能没有重启成功,看下进程列表。

第一 确定旧的任务是不是都 clean 了 第二 看看 pid 是不是正常重启了 实在不行贴代码吧

我都 kill -9 进程了。。。然后启动,。。还是会一会儿运行老代码,一会儿运行新代码。。。

5 楼 已删除

Redis 里也不可能缓存你的代码...

建议贴代码,及详细调试信息等让大家分析下..

瞎猜难以分析。

你是不是开了多个 sidekiq ps aux | grep sidekiq 看看

#7 楼 @dongqs

git 23761 1.2 0.6 4256540 220892 ? Sl May26 3:48 sidekiq 2.17.0 gitlab [0 of 25 busy] git 26455 0.0 0.0 8112 932 pts/0 S+ 00:05 0:00 grep --color=auto sidekiq

有这两个进程

#8 楼 @moliliang 。。。第二个是 grep 这个命令本身的进程 sidekiq 的底层只是对参数用 json 进行序列化了,本身是不存代码的,跑 sidekiq 的时候打开 redis-cli monitor 的监控就能看到每次读写 redis 的操作

记得有几个 queue 吧,其中一个就是上面说的,把对象序列成 JSON 存进去。其他几个是记录状态的。redis 开起来看看就知道了。

#9 楼 @dongqs 感谢,在回复你进程数量之前,已经解决了。。确实是有多个进程。非常感谢你的帮助!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号