Redisのことを調べている途中、BLPOPの挙動のイメージがつかなかった為、実際にNodeで動かして動作を試してみた。
nodeRedis.js
const redis = require('redis')
const client = redis.createClient()
const clientBlocking = client.duplicate()
client.on('error', err => {
console.log(`Error ${err}`)
})
let count = 0
const rpushQueue = () => {
console.log('rpush called')
client.rpush('dataQueue', `This is message${count}`)
count += 1
setTimeout(rpushQueue, 1000)
}
const blpopQueue = () => {
console.log('blpop called')
clientBlocking.blpop('dataQueue', 5, (err, data) => {
console.log('brpop returned')
console.log(data)
setTimeout(blpopQueue, 1000)
})
}
rpushQueue()
blpopQueue()
実行結果
rpush called
blpop called
rpush returned
blpop returned
[ 'dataQueue', 'This is message0' ]
rpush called
rpush returned
blpop called
blpop returned
[ 'dataQueue', 'This is message1' ]
rpush called
blpop called
rpush returned
blpop returned
[ 'dataQueue', 'This is message2' ]
rpush called
blpop called
blpop returned
[ 'dataQueue', 'This is message3' ]
rpush returned
rpush called
blpop called
rpush returned
blpop returned
[ 'dataQueue', 'This is message4' ]
rpush called
blpop called
rpush returned
blpop returned
[ 'dataQueue', 'This is message5' ]
rpush called
blpop called
rpush returned
blpop returned
[ 'dataQueue', 'This is message6' ]
Redisサーバーが受け取ったコマンドをモニタリング
127.0.0.1:6379> monitor
OK
1534090072.046673 [0 127.0.0.1:64628] "info"
1534090072.047025 [0 127.0.0.1:64629] "info"
1534090072.048497 [0 127.0.0.1:64628] "rpush" "dataQueue" "This is message0"
1534090072.049054 [0 127.0.0.1:64629] "blpop" "dataQueue" "5"
1534090073.050424 [0 127.0.0.1:64628] "rpush" "dataQueue" "This is message1"
1534090073.051476 [0 127.0.0.1:64629] "blpop" "dataQueue" "5"
1534090074.054616 [0 127.0.0.1:64628] "rpush" "dataQueue" "This is message2"
1534090074.055912 [0 127.0.0.1:64629] "blpop" "dataQueue" "5"
1534090075.056934 [0 127.0.0.1:64628] "rpush" "dataQueue" "This is message3"
1534090075.057328 [0 127.0.0.1:64629] "blpop" "dataQueue" "5"
1534090076.058631 [0 127.0.0.1:64628] "rpush" "dataQueue" "This is message4"
1534090076.058961 [0 127.0.0.1:64629] "blpop" "dataQueue" "5"
1534090077.060440 [0 127.0.0.1:64628] "rpush" "dataQueue" "This is message5"
1534090077.060917 [0 127.0.0.1:64629] "blpop" "dataQueue" "5"
1534090078.065384 [0 127.0.0.1:64628] "rpush" "dataQueue" "This is message6"
1534090078.065597 [0 127.0.0.1:64629] "blpop" "dataQueue" "5"
1534090079.071470 [0 127.0.0.1:64628] "rpush" "dataQueue" "This is message7"
1534090079.071899 [0 127.0.0.1:64629] "blpop" "dataQueue" "5"
1534090080.072054 [0 127.0.0.1:64628] "rpush" "dataQueue" "This is message8"
1534090080.072165 [0 127.0.0.1:64629] "blpop" "dataQueue" "5"
1534090081.077364 [0 127.0.0.1:64628] "rpush" "dataQueue" "This is message9"
1534090081.077900 [0 127.0.0.1:64629] "blpop" "dataQueue" "5"
1534090082.078408 [0 127.0.0.1:64628] "rpush" "dataQueue" "This is message10"
1534090082.079060 [0 127.0.0.1:64629] "blpop" "dataQueue" "5"