这是我的代码:
var express = require('express');
var RedisStore = require('connect-redis')(express);
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
RedisStore.prototype.__proto__ = Store.prototype;
^
TypeError: Cannot read property 'prototype' of undefined
at module.exports (/home/cherif/Bureau/Twimbee/server/gamma/node_modules/connect-redis/lib/connect-redis.js:96:41)
at Object.<anonymous> (/home/cherif/Bureau/Twimbee/server/gamma/index.js:2:42)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:902:3
Run Code Online (Sandbox Code Playgroud)
请帮忙
使用Node.js集群支持,我希望主进程生成添加到Redis队列的数据项.然后,我想运行多个读取Redis队列的工作进程.当然,只有一个工作进程应该使用从队列中检索的数据项.
为了让我开始,您能否建议在哪里查看Node包支持或原始Redis命令来实现此目的?让我强调消费者是Node.js集群环境中的独立进程,我们可以调整竞争从单个Redis队列读取的工作进程数,以调整整体系统性能.
在我设置或获取密钥之前,有没有办法检查天气 redis 是否可用或由于某些问题而终止?我怎样才能做到这一点?
我正在使用ioredis模块。
所以,我很长一段时间都在学习其他语言的 JS/Node 方式。
我有一个从 redis 通道读取的微型微服务,将它临时存储在一个工作通道中,完成工作,删除它,然后继续前进。如果频道中有更多内容,它会立即重新运行。如果没有,它会设置超时并在 1 秒后再次检查。
它工作正常......但超时轮询似乎不是解决这个问题的“正确”方法。而且我还没有找到太多关于使用 BRPOPLPUSH 尝试阻止(与 RPOPLPUSH 相比)并在 Node 中等待...或其他类似选项的信息。(Pub/Sub 不是这里的一个选项......这是唯一的侦听器,它可能并不总是在侦听。)
这是我正在做的事情的简短本质:
var Redis = require('ioredis');
var redis = new Redis();
var redisLoop = function () {
redis.rpoplpush('channel', 'channel-working').then(function (result) {
if (result) {
processJob(result); //do stuff
//delete the item from the working channel, and check for another item
redis.lrem('channel-working', 1, result).then(function (result) { });
redisLoop();
} else {
//no items, wait 1 second and try again
setTimeout(redisLoop, 1000);
}
});
};
redisLoop();
Run Code Online (Sandbox Code Playgroud)
我觉得我错过了一些非常明显的东西。谢谢!
上下文:我正在构建一个由 1000 个用户同时访问的应用程序,并使用 Redis 作为数据库。我正在使用node-redis客户端。我读到建议从应用程序的每个实例仅打开一个或几个连接,因为打开连接的成本很高。
问题:假设客户端向Redis发送一条命令。当应用程序需要发送另一个命令时,该命令正在传输到 Redis 或正在执行(本质上,未完成)。客户端是等待第一个命令完成,还是立即向 Redis 发送第二个命令?
这很重要,因为如果客户端等待,应用程序就无法真正充分利用异步,并且当来自一千个用户的命令尝试访问 Redis 时,网络调用将成为一个大瓶颈。最好这些命令已经在 Redis 中排队,而不是让它们在通过网络之前等待较早的命令完成。
谢谢!
我目前正在使用 NestJS 的缓存管理器模块,我想知道为什么我无法像这样获得 NodeRedis 客户端:
constructor(
@Inject(CACHE_MANAGER) private cacheManager: Cache,
) {
cacheManager.store.getClient();
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
ERROR in [...].controller.ts:24:24
TS2339: Property 'getClient' does not exist on type 'Store'.
22 | @Inject(CACHE_MANAGER) private cacheManager: Cache,
23 | ) {
> 24 | cacheManager.store.getClient();
| ^^^^^^^^^
25 | }
Run Code Online (Sandbox Code Playgroud)
当我注册 CacheModule 时,我确实配置了cache-manager-redis-store,然后我想我可以获得客户端。
我是一个 TS 菜鸟,但一直在使用 TS 编写一些小型服务。我正在开发一个基于node-redis的 CLI 工具。很棒的 Redis 客户端。
client以下代码片段中的类型是什么?
import { createClient } from "redis";
let client; // what is type of `client`?
client = createClient();
Run Code Online (Sandbox Code Playgroud)
根据使用情况推断类型如下。有办法清理这个吗?提前致谢。
import { createClient, RedisClientType, RedisScripts } from "redis";
let client: RedisClientType<{ json: { ARRAPPEND: typeof import("@node-redis/json/dist/commands/ARRAPPEND"); arrAppend: typeof import("@node-redis/json/dist/commands/ARRAPPEND"); ARRINDEX: typeof import("@node-redis/json/dist/commands/ARRINDEX"); arrIndex: typeof import("@node-redis/json/dist/commands/ARRINDEX"); ARRINSERT: typeof import("@node-redis/json/dist/commands/ARRINSERT"); arrInsert: typeof import("@node-redis/json/dist/commands/ARRINSERT"); ARRLEN: typeof import("@node-redis/json/dist/commands/ARRLEN"); arrLen: typeof import("@node-redis/json/dist/commands/ARRLEN"); ARRPOP: typeof import("@node-redis/json/dist/commands/ARRPOP"); arrPop: typeof import("@node-redis/json/dist/commands/ARRPOP"); ARRTRIM: typeof import("@node-redis/json/dist/commands/ARRTRIM"); arrTrim: typeof import("@node-redis/json/dist/commands/ARRTRIM"); …Run Code Online (Sandbox Code Playgroud) 我正在使用scripto在node.js中编写脚本,我正在尝试对数据库中的值进行nil检查:这里是js代码(用于节点) -
var redis = require("redis");
var redisClient = redis.createClient("6379","localhost");
var Scripto = require('redis-scripto');
var scriptManager = new Scripto(redisClient);
var scripts = {
'test':'local function test(i) '+
'if (i==nil) then return i end '+
'local ch = redis.call("get", i) '+
'if (ch==nil) then return ("ch is nil") '+
'else return "1" '+
'end end '+
'return (test(KEYS[1]))',
};
scriptManager.load(scripts);
scriptManager.run('test', ["someInvalidKey"], [], function(err,result){
console.log(err || result);
});
Run Code Online (Sandbox Code Playgroud)
但在if语句中我无法进入"ch is nil" ...任何帮助?
我通过点击部署选项在Google compute Engine中设置了Redis群集.现在我想从我的节点js代码连接到这个redis服务器使用'ioredis'这里是我的代码连接到redis的单个实例
var Redis = require("ioredis");
var store = new Redis(6379, 'redis-ob0g');//to store the keys
var pub = new Redis(6379, 'redis-ob0g');//to publish a message to all workers
var sub = new Redis(6379, 'redis-ob0g');//to subscribe a message
var onError = function (err) {
console.log('fail to connect to redis ',err);
};
store.on('error',onError);
pub.on('error',onError);
sub.on('error',onError);
Run Code Online (Sandbox Code Playgroud)
它奏效了.现在我想连接到redis作为集群,所以我将代码更改为
/**
* list of server in replica set
* @type {{port: number, host: string}[]}
*/
var nodes =[
{ port: port, host: …Run Code Online (Sandbox Code Playgroud) cluster-computing redis node.js node-redis google-cloud-console
我有一个奇怪的redis行为:
const redis = require('redis');
const { REDIS_URL: redisUrl, REDIS_PASSWORD: redisPassword } = process.env;
const client = redis.createClient(redisUrl, {
no_ready_check: true,
auth_pass: redisPassword
});
client.on('connect', () => {
redisPassword && client.auth(redisPassword);
});
client.on('error', err => {
global.console.log(err.message)
});
Run Code Online (Sandbox Code Playgroud)
但是我一直都收到以下错误:
投掷者 //未处理的“错误”事件
ReplyError:准备检查失败:NOAUTH需要身份验证。
为什么不处理?我设置了 onerror处理程序,
为什么“就绪检查”失败了?我在选项中禁用了它
node-redis ×10
redis ×8
node.js ×7
cachemanager ×1
express ×1
lua ×1
nestjs ×1
null ×1
null-check ×1
typescript ×1