Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Jak używać redis PUBLISH/SUBSCRIBE z nodejs do powiadamiania klientów o zmianie wartości danych?

STARE używaj tylko referencji

Zależności

używa express, socket.io, node_redis i wreszcie przykładowego kodu z media fire.

Zainstaluj node.js+npm (jako non root)

Najpierw powinieneś (jeśli jeszcze tego nie zrobiłeś) zainstalować node.js+npm w 30 sekund (właściwy sposób, bo NIE uruchom npm jako 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

Zainstaluj zależności

Po zainstalowaniu node+npm powinieneś zainstalować zależności, wydając:

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

Pobierz próbkę

Możesz pobrać pełną próbkę z mediafire.

Rozpakuj pakiet

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

Co jest w środku suwaka

./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>

Uruchom serwer

cd pbsb    
node app.js

Uruchom przeglądarkę

Najlepiej jeśli uruchomisz google chrome (ze względu na obsługę websocketów, ale nie jest to konieczne). Odwiedź http://localhost:3000 aby zobaczyć próbkę(na początku nie widzisz nic poza PubSub jako tytuł).

Ale na publish na kanał pubsub powinieneś zobaczyć wiadomość. Poniżej publikujemy "Hello world!" do przeglądarki.

Z ./redis-cli

publish pubsub "Hello world!"


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Używanie Redis do buforowania wyników SQL

  2. Konsekwentne mieszanie jako sposób na skalowanie zapisów

  3. Autouzupełnianie Redis

  4. Która baza danych NoSQL dla ekstremalnie dużych ilości danych?

  5. Rails, Sidekiq — Redis NOAUTH