这是我的红宝石代码:
require 'redis'
redis = Redis.new
Thread.new do
redis.subscribe('foo_bar') do |on|
on.message do |key, id|
puts id
end
end
end
redis.publish('foo_bar', 1337)
有谁能告诉我,为什么最后一行的“发布”指令会阻止我的进程?
由于
答案 0 :(得分:1)
redis.subscribe
似乎在整个过程中阻止了redis访问。因此,当您尝试发布它时,锁定。
解决方案:尝试使用轮询代替subscribe
解决方案2:使用多个REDIS连接,即创建REDIS连接池
答案 1 :(得分:0)
首先,发布不会阻止该过程。
require 'redis'
redis = Redis.new
Thread.new do
redis.subscribe('foo_bar') do |on|
on.message do |key, id|
puts id
end
end
end
redis.publish('foo_bar', 1337)
应输出:
1337
而且,
require 'redis'
redis = Redis.new
Thread.new do
redis.subscribe('foo_bar') do |on|
on.message do |key, id|
puts id
end
end
end
redis.publish('foo_bar', 1337)
redis.publish('foo_bar', 1338)
输出:
1337
1338
在pub / sub系统中,发布者推送消息,订阅者是一个始终阻塞的同步过程。 Publisher始终是异步的。