最近准备使用 sidekiq 做异步队列,sidekiq 又基于 Redis,我对于 Redis 并不是很熟悉,现在遇到一些问题想请教一下大家:
1.我们现在已经使用了一个 Redis 用于存储 session,以及同系统其他组件打交道,那 sidekiq 的 Redis 是需要一个新的 Redis 呢,还是使用已有的 Redis 呢,我担心会不会有一些冲突。
2.因为公司原因,我们需要使用公司内别的部门提供的 Redis 服务,当前我们申请的是一个分布式的 Redis,结果在本地调试连接这个分布式的 Redis 时 sidekiq 报错了,一处是调用了info
方法,另外一处是调用了 Redis 的brpop
方法,这两个方法分布式的 Redis 均不支持,而且一旦调用了,Redis 就自动把连接给断开了。
def retrieve_work
# 这里调用了brpop
work = Sidekiq.redis { |conn| conn.brpop(*queues_cmd) }
UnitOfWork.new(*work) if work
end
这个地方我也有困惑,我查了下brpop
,是一个阻塞型方法,是不是分布式的系统很难实现阻塞型方法呢?因为我看了下公司分布式 Redis 的文档,不支持的指令列表中好几个指令都是 b 开头的。