标签: node-redis

需要了解有关 socket.io 和 redis 和 nginx 的一些信息

我的目标是构建一个聊天应用程序 - 类似于 whatsapp

据我了解,socket.io 是一个用 javascript 编写的实时通信库,使用起来非常简单

例如

 // Serverside
    io.on('connection', function(socket) {
        socket.on('chat', function(msg) {
            io.emit('chat', msg);
      });
    });

 // ClientSide (Using jquery)

   var socket = io();
  $('form').submit(function(){
    socket.emit('chat', $('#m').val());
    $('#m').val('');
    return false;
  });

  socket.on('chat', function(msg){
    $('#messages').append($('<li>').text(msg));
  });
Run Code Online (Sandbox Code Playgroud)

1)我是否总是需要启动一个io.on('connection')来使用实时功能,或者我可以开始使用socket.on对象来代替?例如我有一条路线

app.post('/postSomething', function(req, res) {
    // Do i need to start an io.on or socket.on here?

});
Run Code Online (Sandbox Code Playgroud)

因为我希望实时功能仅在特定路线上收听。

2)Redis是一个处理pub/sub的数据结构库,为什么需要使用pub/sub机制?我阅读了很多文章,但无法掌握其中的概念。文章示例http://ejosh.co/de/2015/01/node-js-socket-io-and-redis-intermediate-tutorial-server-side/

例如下面的代码

// Do i need redis for this, if so why? is it for caching purposes? …
Run Code Online (Sandbox Code Playgroud)

nginx node.js socket.io node-redis socket.io-1.0

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

如何知道node js中redis中给定键的值类型

我正在使用 Redis 和 Node JS 做一个小项目 - Redis 客户端“ node_redis ”。问题是,要获取键的值,有不同的 get 函数,例如对于字符串和整数类型有 client.get,对于数组类型有 client.lrange() 等。那么如何确定使用哪个函数来获取value 如果所需的值类型未知,是否有办法识别值类型。

redis node.js node-redis

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

无论提供的主机如何,connect-redis 都会连接到 localhost

我有一个express服务器,我正在使用connect-rediswithexpress-session将会话存储到我的 elasticache 实例。但是应用程序仅尝试连接到本地主机。这是错误:-

config.redisServer.host dev-xxx-site-cache.xxxxx.0001.use1.cache.amazonaws.com
listening on {"address":"::","family":"IPv6","port":8080}...
events.js:141
      throw er; // Unhandled 'error' event
      ^

Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
    at Object.exports._errnoException (util.js:856:11)
    at exports._exceptionWithHostPort (util.js:879:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1062:14)
Run Code Online (Sandbox Code Playgroud)

在代码中,我提供了正确的主机:-

const RedisStore = require('connect-redis')(expressSession);
const redisClient = redis.createClient({ host: config.redisServer.host, port: config.redisServer.port });
redisClient.on('error', err => console.error(err));
Run Code Online (Sandbox Code Playgroud)

javascript redis node-redis express-session

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

带有节点 XADD 的 Redis 流

如何在 redis-node 中使用 Redis 流。

XADD 的 Redis 文档是:

XADD mystream * key1 "Value1" key2 "Value2"
Run Code Online (Sandbox Code Playgroud)

这将添加具有给定键值对的单个条目。* 指定 id 应自动生成。

我尝试在 Node 中执行它:

redisClient.xadd("myStream", "*", "name", "anant");
Run Code Online (Sandbox Code Playgroud)

但我刚刚收到一条错误消息,指出 XADD 未定义。

redis node.js node-modules node-redis

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

如何在同一个 Redis 命令中启动、增加和设置到期时间?

INCR mykey初始化为 0 并将值增加到 1。我将如何mykey在同一个命令中将过期时间设置为 ,就像它可以完成的那样SETEX

redis node-redis redis-cli

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

如何使用 jest 模拟 node-redis

我正在使用jest并尝试使用redis-mock来模拟node-redis

// redis.js

const redis = require("redis");
const client = redis.createClient({ host: '127.0.0.1', port: 6379 });

// redis.test.js

const redisMock = require("redis-mock");

describe("redis", () => {
  jest.doMock("redis", () => jest.fn(() => redisMock));
  const redis = require("./redis");
});
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,出现错误

类型错误:redis.createClient 不是函数

我觉得我在使用时做错了什么jest.doMock()

感谢您的帮助。

javascript node.js node-redis jestjs

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

如何在 NestJs 中的 Typeorm 缓存配置中重用 Redis 连接

我正在使用 Redis 在 TypeOrm 中缓存查询。

但问题是,TypeOrm 和 Redis 包正在打开单独的连接,我只想为两者重用相同的连接。

这是 typeorm 配置:

import { TypeOrmModuleOptions } from '@nestjs/typeorm';
import { Constants } from '../utils/Constants';

export const typeOrmConfig: TypeOrmModuleOptions = {
    type: Constants.DB_TYPE,
    host: Constants.DB_HOST,
    port: Constants.DB_PORT,
    username: Constants.DB_USER_NAME,
    password: Constants.DB_PASSWORD,
    database: Constants.DB_NAME,
    entities: [ __dirname + '/../**/*.entity.{js,ts}' ],
    synchronize: true,
    logging: true,
    cache: {
        type: 'ioredis',
        duration: 60000,
        options: {
            host: 'localhost',
            password: 'swapnil',
            port: 6379
        }
    },
    extra: {
        max: 10,
        connectionTimeoutMillis: 2000
    }
};
Run Code Online (Sandbox Code Playgroud)

我正在为 redis使用@svtslv/nestjs-ioredis包:

import …
Run Code Online (Sandbox Code Playgroud)

node.js node-redis typescript typeorm nestjs

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

无法连接到nodejs中的redis

首先,先来说说细节:

节点版本:v16

使用redislabs云(v6.2.3)

npm 包 redis 版本 4.0.3

这是代码...

const redis = require("redis");
require("dotenv").config();

const client = redis.createClient({
  host: process.env.REDIS_URI,
  port: process.env.REDIS_PORT,
  password: process.env.REDIS_PASSWORD
});

client.on("connect", () => {
  console.log("Connected to our redis instance!");
  client.set("iAmAKey", "Value");
});
Run Code Online (Sandbox Code Playgroud)

运行时它不会输出任何内容:(并且只是在一段时间后退出。

任何帮助将不胜感激。谢谢!

javascript redis node.js node-redis

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

Redis中的"存档"发布/订阅消息

我正在使用Redis的发布/订阅功能.因此,服务器发布10个项目,然后客户端获取这10个项目.

然而,现在,新客户订阅了订阅源.我希望他们能够获得前10个项目以及任何新项目.

Redis是否有办法使用发布和订阅功能?源记录是否存储在数据库中的任何位置?有这么简单的方法吗?是将邮件存储在列表中并让客户端LRANGE my_list 0 10在列表中执行操作的最佳方法吗?

redis node-redis

0
推荐指数
1
解决办法
721
查看次数

Redis Sorted Set 成员大小和性能

Redis Sorted Sets 主要基于 Score 进行排序;但是,在多个成员共享相同 Score 词典(Alpha)排序的情况下。在Redis的zadd文件表示该功能的复杂性:

"O(log(N)) 其中 N 是排序集中的元素数"

无论成员大小/长度如何,我都必须假设这仍然是正确的;但是,我有一个案例,只有 4 个分数导致成员在 Score 之后按字典顺序排序。

我想为每个成员添加一个时基键,以使二级排序基于时间,并为成员添加一些唯一性。就像是:

"time-based-key:member-string"
Run Code Online (Sandbox Code Playgroud)

我的成员字符串可以是更大的 JavaScript 对象文字,如下所示:

JSON.stringify( {/* object literal */} )
Run Code Online (Sandbox Code Playgroud)

排序集 zadd 和其他功能的性能会保持不变吗?

如果没有,性能会受到多大程度的影响?

sorting redis node-redis

0
推荐指数
1
解决办法
6391
查看次数

按顺序扫描Redis排序集

node redis用来连接Redis。

zscanRedis提供的功能不会按顺序返回元素。我想知道是否有javascript图书馆可以帮助我做到这一点。

redis node-redis

0
推荐指数
1
解决办法
750
查看次数

如何在Node.js中使用Redis WATCH?

背景

我有一个原子操作,我需要使用一个锁来防止其他客户端读取不稳定的值。

  • 平台:节点10.1.0
  • 图书馆Redis

根据官方文档,解决方案是与WATCH一起使用MULTI

问题

现在,MULTI已记录了的用法,我对如何使用它有了一个大致的了解。

var redis = require( "redis" );
var bluebird = require( "bluebird" );
var client = redis.createClient();
var multi = client.multi();

multi.hsetAsync( "test", "array", "[1, 2]" );
multi.hgetAsync( "test", "array" );
multi.execAsync( ).then( console.log ); // [ 0, "[1, 2]" ]
Run Code Online (Sandbox Code Playgroud)

我了解这是multi的正确实现。首先,我需要创建一个客户端,然后创建一个多查询。

我理解这multiclient共享相同的接口,但是也不清楚我使用hgetAsync而不是hgetmulti查询中有什么好处(因为有的话),因为我假设multi所做的全部工作就是将所述请求同步添加到队列中(因此我不需要Aart vartiant)。

调用multi.execAsync( )后,查询的执行将自动进行。 …

javascript redis node.js node-redis

0
推荐指数
1
解决办法
1433
查看次数

如何在 RedisJSON 中存储大量对象?

假设我有一个 JavaScript 对象,其结构如下:

{
  id: "someUniqueId",
  foo: "otherData",
  bar: 30
}
Run Code Online (Sandbox Code Playgroud)

我想在RedisJSON中存储数百个。我目前正在使用node-redis 客户端将密钥初始化'json-objects'为空对象:

await client.json.set('json-objects', `$`, {});
Run Code Online (Sandbox Code Playgroud)

然后,我将对象添加到该键的根对象,例如:

const dataToStore = {
  id: "someUniqueId",
  foo: "otherData",
  bar: 30
}

await client.json.set('json-objects', `$.${dataToStore.id}`, dataToStore as any);
Run Code Online (Sandbox Code Playgroud)

这会导致键下出现一个大对象,'json-objects'如下所示:

{
  "someUniqueId-1": {
    id: "someUniqueId-1",
    foo: "otherData",
    bar: 30
  },
  "someUniqueId-2": {
    id: "someUniqueId-2",
    foo: "otherData2",
    bar: 31
  },
  "someUniqueId-3": {
    id: "someUniqueId-3",
    foo: "otherData3",
    bar: 32
  },
  and so on...
}
Run Code Online (Sandbox Code Playgroud)

然后我可以使用路径查询和更新:

await client.json.set('json-objects', `$.${id}.foo`, "someUpdatedData"); …
Run Code Online (Sandbox Code Playgroud)

javascript redis node.js node-redis redisjson

0
推荐指数
1
解决办法
144
查看次数