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

Redis sub/pub dan php/nodejs

Opsi 3

Saat Anda memperbarui MySQL dari PHP, Anda memublikasikan perubahan tersebut ke node.js melalui redis publish perintah (terbitkan dari PHP saat mengubah basis data). Dari node.js saya akan menerima perubahan itu secara real-time berkat berlangganan Redis. Kemudian saya hanya akan menyiarkannya kepada pengguna yang tertarik melalui socket.io. Anda dapat misalnya publish untuk menyalurkan mysql . Ambil contoh pernyataan SQL berikut => INSERT INTO comments (1, "Hello World") . Dimana 1 adalah sesuatu seperti userid, dan Hello World akan menjadi sesuatu seperti komentar. Saya mungkin tidak akan mempublikasikan pernyataan SQL ke saluran itu, tetapi JSON yang dapat saya gunakan dengan mudah baik dari JavaScript(JSON.stringify / JSON.parse) dan PHP(json_encode / json_decode).

Perbarui

Anda tidak menjalankan cron-job karena ini akan mengalahkan tujuan dari pubsub Redis. Ambil contoh saya mengunjungi situs web Anda yang merupakan blog di http://localhosts . Saya membaca artikel di http://localhost.com/a.php . Di bawah ini di situs Anda menyediakan formulir yang dapat saya gunakan untuk mengirim komentar ke artikel itu:

a.php

<html>
<head>
    <title>Interesting blog post</title>
</head>
<body>
    <div id="article">This is interesting</div>

    <div id="comments">
        <div class="comment">
            <div class="from">Alfred Said at 22:34</div>
            <div class="message">Hello World</div>
        </div>
    </div>

    <form action="post.php" method="post">
        <label for="name">Your name</label><br />
        <input type="name" id="name" name="name" /><br />

        <label for="message">Your Message:</label><br />
        <textarea id="message" name="message"></textarea>

        <input type="submit" />
    </form>


    <script src='jquery.min.js'></script>
    <script src='http://localhost:8888/socket.io/socket.io.js'></script>
    <script type="text/javascript">
        $(document).ready(function () {
                var socket = io.connect('http://localhost:8888');

                socket.on('message', function (json) {
                    var obj = $.parseJSON(json);
                    alert('in here: ' + obj.name);
                });
        });
    </script>
</body>
</html>

Saya mengirimkan formulir yang memiliki atribut tindakan http://localhost/postcomment.php . Tapi ini adalah bagian yang penting! Di post.php Anda mengambil data yang saya posting dan memasukkannya ke MySQL menggunakan INSERT INTO comments (1, "Hello World") . Ketika mutasi ini terjadi, Anda juga perlu menginformasikan proses node.js yang terus mendengarkan saluran mysql :

post.php:

<?php

$_POST  = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

require("./Predis.php");
$redis = new Predis\Client();
$obj = array(
    'name'      => $_POST['name'],
    'message'   => $_POST['message']
);

$json = json_encode($obj);
$redis->publish("mysql", $json);

echo $json;

post.php membutuhkan predis.

Kode simpul dengan node_redis akan terlihat seperti:

var redis       = require('redis'),
    subscriber  = redis.createClient(),
    express     = require('express'),
    store       = new express.session.MemoryStore(),
    app         = express.createServer(
        express.bodyParser(),
        express.static(__dirname + '/public'),
        express.cookieParser(),
        express.session({ secret: 'htuayreve', store: store}))
    sio         = require('socket.io');

app.listen(8888, '127.0.0.1',  function () {
    var addr = app.address();
    console.log('app listening on http://' + addr.address + ':' + addr.port);
});

var io = sio.listen(app);

io.configure(function () {
    io.set('log level', 1); // reduce logging
});

io.sockets.on('connection', function (socket) {
    socket.join('mysql');   
    socket.on('disconnect', function () {
    });
});

subscriber.on('message', function (channel, json) {
    // this will always retrieve messages posted to mysql
    io.sockets.in('mysql').json.send(json);
});

subscriber.subscribe('mysql');

Contoh ini bergantung pada paket berikut, yang dapat Anda instal melalui npm

npm install socket.io
npm install redis
npm install express

Selalu ketika saya memposting formulir post.php , saya juga memublikasikan perubahan ini ke redis. Bagian ini penting! Proses node.js selalu menerima perubahan tersebut berkat pubsub Redis. Setiap kali skrip php mengubah database, Anda harus memublikasikan perubahan ini ke Redis dengan publish .

P.S:Semoga ini jelas. Mungkin nanti ketika saya punya waktu, saya memperbarui dengan mungkin sedikit cuplikan...




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis failover dengan StackExchange / Sentinel dari C#

  2. Redis vs. Memcached – Perbandingan 2021

  3. Bagaimana Redis digunakan di Trello?

  4. Caching booting pegas dengan redis, kunci memiliki \xac\xed\x00\x05t\x00\x06

  5. Perbedaan antara Redis AOF dan Tarantool WAL log