标签: node-redis

使用集群将Socket.IO扩展到多个Node.js进程

用这个撕掉我的头发......有没有人设法将Socket.IO扩展到由Node.js的集群模块产生的多个"工人"进程?

假设我有四个工作进程(伪):

// on the server
var express = require('express');
var server = express();
var socket = require('socket.io');
var io = socket.listen(server);

// socket.io
io.set('store', new socket.RedisStore);

// set-up connections...
io.sockets.on('connection', function(socket) {

  socket.on('join', function(rooms) {
    rooms.forEach(function(room) {
      socket.join(room);
    });
  });

  socket.on('leave', function(rooms) {
    rooms.forEach(function(room) {
      socket.leave(room);
    });
  });

});

// Emit a message every second
function send() {
  io.sockets.in('room').emit('data', 'howdy');
}

setInterval(send, 1000);
Run Code Online (Sandbox Code Playgroud)

在浏览器上......

// on the client
socket = io.connect(); …
Run Code Online (Sandbox Code Playgroud)

javascript redis node.js socket.io node-redis

60
推荐指数
1
解决办法
4万
查看次数

与模式匹配的键数

如何找到具有匹配模式的所有键的计数.

例如,有两个键abc:random-text-1abc:random-text-2.这里的共同模式是abc:.所以,这里的计数是2.

我怎样才能在redis中做到这一点?

redis node-redis

56
推荐指数
5
解决办法
5万
查看次数

Redis NodeJs服务器错误,客户端关闭

我正在开发一个必须缓存和监控聊天的应用程序,目前它是一个本地应用程序,我已经安装了 redis 和 redis-cli。我面临的问题是(node:5368) UnhandledPromiseRejectionWarning: Error: The client is closed 在下面附加代码片段

//redis setup
const redis = require('redis');
const client = redis.createClient()//kept blank so that default options are available
  

//runs when client connects
io.on("connect", function (socket) {

  //this is client side socket
  //console.log("a new user connected...");

  socket.on("join", function ({ name, room }, callback) {
    //console.log(name, room);
    const { msg, user } = addUser({ id: socket.id, name, room });
   // console.log(user);
    if (msg) return callback(msg); //accessible in frontend

    //emit to all …
Run Code Online (Sandbox Code Playgroud)

sockets redis node.js node-redis

35
推荐指数
4
解决办法
7万
查看次数

Node_redis - 如何删除密钥?

有没有办法按键删除/删除条目,使用Node_redis?我从文档中看不出任何这样的选项..

redis node.js node-redis

33
推荐指数
5
解决办法
4万
查看次数

如何删除节点redis中的所有内容?

我希望能够删除所有密钥.有没有办法刷新节点redis中的所有?

Redis客户:

client = redis.createClient(REDIS_PORT, REDIS_HOST);
Run Code Online (Sandbox Code Playgroud)

redis node.js node-redis

23
推荐指数
2
解决办法
1万
查看次数

如何使用节点在redis中存储二进制对象?

我试图在redis中保存二进制对象,然后将其作为图像提供.

这是我用来保存数据的代码:

var buff=new Buffer(data.data,'base64');
client.set(key,new Buffer(data.data,'base64'));
Run Code Online (Sandbox Code Playgroud)

以下是转储数据的代码:

client.get(key,function(err,reply){
        var data = reply;
        response.writeHead(200, {"Content-Type": "image/png"});
        response.end(data,'binary');

});
Run Code Online (Sandbox Code Playgroud)

数据的前几个字节似乎已损坏.神奇的数字不正确.

做了一些试验:

当我做以下事情时:

var buff=new Buffer(data.data,'base64');
console.log(buff.toString('binary'));
Run Code Online (Sandbox Code Playgroud)

我明白了:

0000000:c289 504e 470d 0a1a 0a00 0000 0d49 4844

当我这样做

 var buff=new Buffer(data.data,'base64');
 console.log(buff);
Run Code Online (Sandbox Code Playgroud)

我得到以下内容:

缓冲液89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00

我不确定c2来自哪里

redis node.js node-redis

18
推荐指数
3
解决办法
1万
查看次数

Typescript 中的 Redis redis.createClient()

我试图使用 typescript 将 Redis (v4.0.1) 连接到我的 Express 服务器,但遇到了一些问题。正在学习打字稿。它在redis.createClient()内的主机上显示红线有人可以帮助我吗?

const host = process.env.REDIS_HOST;
const port = process.env.REDIS_PORT;
const redisClient = redis.createClient({
  host,
  port,
});
Run Code Online (Sandbox Code Playgroud)
Argument of type '{ host: string | undefined; port: string | undefined; }' is not assignable to parameter of type 'Omit<RedisClientOptions<never, RedisScripts>, "modules">'.
  Object literal may only specify known properties, and 'host' does not exist in type 'Omit<RedisClientOptions<never, RedisScripts>, "modules">'.ts(2345)
Run Code Online (Sandbox Code Playgroud)

redis node.js express node-redis typescript

15
推荐指数
1
解决办法
3万
查看次数

Node.js + Express + Redis,何时关闭连接?

我有一个使用Expressnode_redis的Node应用程序.我正在遵循学习节点手册中概述的方法,并在应用程序的生命周期中创建单个客户端.鉴于这种方法,我什么时候打电话close()给redis客户端?我还需要吗?

相关代码

var express = require( 'express' ),
    redis = require( 'redis' );

var app = express(),
    config = require( './config/application' )[ app.get( 'env' ) ];

// create Redis client
var redisClient = redis.createClient();
redisClient.on( 'error', function( err ) {
  console.log( 'Error' + err );
} );
// select the database
redisClient.select( config.redis_database );

...
/* more setup, route defintions, etc. */
...

http.createServer( app ).listen( 4000, function() {
  console.log( 'Server started …
Run Code Online (Sandbox Code Playgroud)

node.js express node-redis

13
推荐指数
2
解决办法
6292
查看次数

如何将数据从客户端发送到redis然后再发送到laravel

我正在使用laravel和redis进行实时聊天.我可以从我的laravel中触发事件并将该数据接收到客户端.

我的问题是如何从客户端发送内容然后将其接收到redis并将其传递给laravel

例如,我如何检查用户是否已阅读聊天消息.

代码:

var express = require('express');
var app     = express();
var server  = require('http').createServer(app);
var io      = require( 'socket.io' ).listen( server );
var redis = require('redis');
var port = process.env.PORT || 8888;
server.listen(port,'x.x.x.x');

io.on('connection', function (socket) {
   console.log("Connected");
});
var redisClient = redis.createClient();
redisClient.psubscribe(['get_message','read_message']);
redisClient.on("pmessage", function(channel, pattern, message) {
    console.log(channel); // i can see get_message on this line in console but not read_message
});

//Also tried this
io.on('read_message', function (socket) {
   console.log(socket);
});
//Also this
redisClient.on('read_message', function (socket) …
Run Code Online (Sandbox Code Playgroud)

php redis node.js laravel node-redis

13
推荐指数
1
解决办法
1914
查看次数

重用 Redis 连接:套接字意外关闭 - node-redis

首先,让我告诉您如何在 NodeJS 应用程序中使用 Redis 连接:

  • 我使用单例类在整个应用程序中重复使用一个连接。
class RDB {

    static async getClient() {
        if (this.client) {
            return this.client
        }

        let startTime = Date.now();

        this.client = createClient({
            url: config.redis.uri
        });

        await this.client.connect();

        return this.client;
    }

}
Run Code Online (Sandbox Code Playgroud)

由于某种原因 - 我不知道 - 我的应用程序有时会崩溃,无缘无故地出现错误 - 这种情况大约每周发生一两次:

Error: Socket closed unexpectedly
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是:

  1. 像这样使用 Redis 连接可以吗?我的做法有问题吗?
  2. 为什么会出现这种情况?为什么我的套接字意外关闭?
  3. 有没有办法捕获此错误(使用我的方法)或实现 Redis 连接的任何其他良好实践?

sockets redis node.js node-redis

13
推荐指数
2
解决办法
1万
查看次数