Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Bagaimana cara menggunakan redis PUBLISH/SUBSCRIBE dengan nodejs untuk memberi tahu klien ketika nilai data berubah?

OLD hanya menggunakan referensi

Ketergantungan

menggunakan express, socket.io, node_redis dan yang terakhir adalah kode sampel dari media fire.

Instal node.js+npm(sebagai non root)

Pertama, Anda harus (jika Anda belum melakukannya) menginstal node.js+npm dalam 30 detik (cara yang benar karena Anda harus TIDAK jalankan npm sebagai root ):

echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bashrc
. ~/.bashrc
mkdir ~/local
mkdir ~/node-latest-install
cd ~/node-latest-install
curl http://nodejs.org/dist/node-latest.tar.gz | tar xz --strip-components=1
./configure --prefix=~/local
make install # ok, fine, this step probably takes more than 30 seconds...
curl http://npmjs.org/install.sh | sh

Instal dependensi

Setelah Anda menginstal node+npm Anda harus menginstal dependensi dengan mengeluarkan:

npm install express
npm install socket.io
npm install hiredis redis # hiredis to use c binding for redis => FAST :)

Unduh contoh

Anda dapat mengunduh sampel lengkap dari mediafire.

Buka zip paket

unzip pbsb.zip # can also do via graphical interface if you prefer.

Apa yang ada di dalam zip

./app.js

const PORT = 3000;
const HOST = 'localhost';

var express = require('express');

var app = module.exports = express.createServer();

app.use(express.staticProvider(__dirname + '/public'));

const redis = require('redis');
const client = redis.createClient();

const io = require('socket.io');

if (!module.parent) {
    app.listen(PORT, HOST);
    console.log("Express server listening on port %d", app.address().port)

    const socket  = io.listen(app);

    socket.on('connection', function(client) {
        const subscribe = redis.createClient();
        subscribe.subscribe('pubsub'); //    listen to messages from channel pubsub

        subscribe.on("message", function(channel, message) {
            client.send(message);
        });

        client.on('message', function(msg) {
        });

        client.on('disconnect', function() {
            subscribe.quit();
        });
    });
}

./public/index.html

<html>
<head>
    <title>PubSub</title>
    <script src="/socket.io/socket.io.js"></script>
    <script src="/javascripts/jquery-1.4.3.min.js"></script>
</head>
<body>
    <div id="content"></div>
    <script>    
        $(document).ready(function() {
            var socket = new io.Socket('localhost', {port: 3000, rememberTransport: false/*, transports: ['xhr-polling']*/});
            var content = $('#content');

            socket.on('connect', function() {
            });

            socket.on('message', function(message){
                content.prepend(message + '<br />');
            }) ;

            socket.on('disconnect', function() {
                console.log('disconnected');
                content.html("<b>Disconnected!</b>");
            });

            socket.connect();
        });
    </script>
</body>
</html>

Mulai server

cd pbsb    
node app.js

Mulai peramban

Paling baik jika Anda memulai google chrome (karena dukungan soket web, tetapi tidak perlu). Kunjungi http://localhost:3000 untuk melihat sampel (pada awalnya Anda tidak melihat apa pun selain PubSub sebagai judul).

Tapi di publish ke saluran pubsub Anda akan melihat pesan. Di bawah ini kami menerbitkan "Hello world!" ke browser.

Dari ./redis-cli

publish pubsub "Hello world!"


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Django, Redis:Di mana meletakkan kode koneksi

  2. Labu dengan Contoh – Menerapkan Antrian Tugas Redis

  3. Siaran pesan gagal-aman untuk dikonsumsi oleh penerima tertentu menggunakan redis dan python

  4. Sidekiq tidak memproses antrian

  5. Konvensi penamaan kunci redis?