首先先說一下流程:
1.保存數據到Redis,然后將member值publish到 chat頻道(publish.js功能)
2.readRedis.js文件此前一直在監聽chat頻道,readRedis.js文件接收到member后,用它作為條件去Redis中去查找,拿到score數據
代碼如下:
publish.js文件:
var redis = require("redis"); var client = redis.createClient(6379, "127.0.0.1"); function zadd(key, score, member) { client.zadd(key, score, member, function () { client.publish("chat", member);//client將member發布到chat這個頻道 //然后訂閱這個頻道的訂閱者就會收到消息 }); } for (var i = 0; i < 10; i++) { zadd("z", i, "" + i);//發布10次 console.log("第" + i + "次"); }
readRedis.js文件:
var redis = require("redis"); var client = redis.createClient(6379, "127.0.0.1"); var client1 = redis.createClient(6379, "127.0.0.1"); function getRedisData() { //客戶端連接redis成功后執行回調 client.on("ready", function () { //訂閱消息 client.subscribe("chat"); client.subscribe("chat1"); console.log("訂閱成功。。。"); }); client.on("error", function (error) { console.log("Redis Error " + error); }); //監聽訂閱成功事件 client.on("subscribe", function (channel, count) { console.log("client subscribed to " + channel + "," + count + "total subscriptions"); }); //收到消息后執行回調,message是redis發布的消息 client.on("message", function (channel, message) { console.log("我接收到信息了" + message); dealWithMsg(message); }); //監聽取消訂閱事件 client.on("unsubscribe", function (channel, count) { console.log("client unsubscribed from" + channel + ", " + count + " total subscriptions") }); } function dealWithMsg(message) { //按照message查詢內容 client1.zscore("z", message, function (err, reply) { console.log(message + "的內容是:" + reply); }); } getRedisData();
當publish的內容為對象的時候,要把對象轉化成Buffer類型,例如:
function publishRegisterResult(responseBody) { responseBody = { name: "lw", age: 30 }; var bufferBody = new Buffer(JSON.stringify(responseBody), 'utf8'); redis.ac_register_redis.publish(config.redis_prefix.special_register_result, bufferBody, function (err, result) { if (err) { console.log("publish register result error: ", err.toString()); } else { console.log("publish register result success"); } }); }
注意, 只要客戶端訂閱了頻道, 除了SUBCRIBE,UNSUBCRIBE,PSUBCRIBE,PSUBCRIBE,就不能執行其他命令。
參考:http://wiki.jikexueyuan.com/project/redis/subscribe-to-release-mechanism.html