我正试图从redis实例中获取一堆密钥.我正在使用node-redis.我正在使用循环:
for( var i=1; i<=num; ++i ){
client.get(key + ':' + num, function (err, reply) {
obj[num] = reply;
});
}
return obj;
Run Code Online (Sandbox Code Playgroud)
但是obj只是未定义.我觉得我可能遇到问题,因为get显然是异步调用.还有另一种方法来实现这一目标吗?我应该只将值存储在有序集中吗?
我有一个现有的键值列表:key value1 value2.
在redis-cli,我跑LRANGE key 0 -1,返回:
1) value1
2) value2
Run Code Online (Sandbox Code Playgroud)
这确认了键值列表存在.在redis-cli,运行LINDEX key 0返回:
"value1"
Run Code Online (Sandbox Code Playgroud)
但是,在我的节点应用程序中,当我执行时console.log(redis.lindex('key', 0)),它会打印true而不是索引处的值.
我究竟做错了什么?
注意:我正在使用该node-redis包.
我是 redis 新手,有以下问题。对于我的应用程序来说,拥有多个具有较小值的键或具有较大值的单个键会更好吗?举个例子,我们可以有一个包含球队的足球联赛,在每个球队中我们存储球员。我们可以有类似的东西
(key) premier_league
(value) {MANU : [manu_player1,....,manu_player25], ...., MAN_CITY : [man_city_player1,....,man_city_player25]}
Run Code Online (Sandbox Code Playgroud)
或者类似的东西
premier_league:MANU --> {players:[manu_player1,....,manu_player25]}
premier_league:MAN_CITY --> {players:[man_city_player1,....,man_city_player25]}
Run Code Online (Sandbox Code Playgroud) 我正在使用 Node.js 的 Redis NPM 库 - 我可以像这样监听连接“就绪”事件
var client = require('redis').createClient();
client.on('ready', function () {
client.keys('*', function (err, keys) {
if (err) {
log.error(err);
} else {
for (var i = 0; i < keys.length; i++) {
createLocalDataMap(keys[i]);
}
}
});
});
Run Code Online (Sandbox Code Playgroud)
但是,我如何查询 Redis 来查看它是否已准备好,而不是侦听在我准备好处理它之前可能会触发的事件?
我想我可以放弃就绪事件,只进行查询,然后等待响应,但是有没有更好、更安全、更复杂的方法呢?
换句话说,我很可能必须编写这样的函数:
var isReady = false;
client.on('ready', function(){
isReady = true;
});
function doSomethingMuchLater(){
if(isReady){
//query redis as normal
}
else {
client.on('ready', function(){
isReady = true;
//now I do what I wanted to …Run Code Online (Sandbox Code Playgroud) 我正在使用express并connect-redis让服务器使用 Redis 进行会话。
import Session from 'express-session';
const session = Session({
resave: true,
saveUninitialized: true,
key: '...',
secret: '...',
store: initializeRedis(Session);
});
Run Code Online (Sandbox Code Playgroud)
redis 初始值设定项如下所示:
import { createClient as createRedisClient } from 'redis';
import connectRedis from 'connect-redis';
export default function initializeRedis(Session) {
const redisClient = createRedisClient();
const RedisStore = connectRedis(Session);
return new RedisStore({
host: 'redis',
port: 6378,
});
}
Run Code Online (Sandbox Code Playgroud)
根据前面的选项参数,服务器应该通过端口而不是redis默认的连接到而不是默认的127.0.0.163786379
但是,无论这些值等于什么,我总是得到相同的输出:
错误:Redis 连接到 127.0.0.1:6379 失败 - 连接 ECONNREFUSED 127.0.0.1:6379
我在配置过程中遗漏了什么吗?
我想在发布时设置 Redis 发布/订阅消息的过期时间。我如何在nodeJS中做到这一点?
var redis = require('redis');
redis.createClient().publish('some channel', 'some message', function(err) {
if (err) {
console.error('error publishing:', err);
}
});
Run Code Online (Sandbox Code Playgroud)
发布消息的代码如上。我必须做哪些更改才能设置已发布消息的到期时间。
我们在使用 Redis 的应用程序中遇到超时问题。已经调查过但没有成功。请参阅下面的超时错误:
StackExchange.Redis.RedisTimeoutException: Timeout performing GET
USERORGANIZATIONS_D96510A4-A9A2-4DAA-84A9-BB77363DD3EA, inst: 9, mgr:
ProcessReadQueue, err: never, queue: 24, qu: 0, qs: 24, qc: 0, wr: 1, wq: 1,
in: 65536, ar: 1, clientName: RD00155D008B42, serverEndpoint:
Unspecified/xxxxxxx.redis.cache.windows.net:xxxx, keyHashSlot: 9735, IOCP:
(Busy=0,Free=1000,Min=4,Max=1000), WORKER:
(Busy=27,Free=32740,Min=200,Max=32767) (Please take a look at this article
for some common client-side issues that can cause timeouts:
http://stackexchange.github.io/StackExchange.Redis/Timeouts)
Run Code Online (Sandbox Code Playgroud)
如果需要更多信息,请询问我,我会尽力提供。提前致谢。
我试图了解 Redis AOF 文件是如何工作的,并且可能会根据一些简单的 Redis AOF 文件编写一个解析器。现在我通过在 Redis 中执行这些命令生成了一个 AOF 文件:
SET firstkey firstvalue
SET secondkey secondvalue
Run Code Online (Sandbox Code Playgroud)
生成的 AOF 文件如下所示:
*2
$6
SELECT
$1
0
*3
$3
SET
$8
firstkey
$10
firstvalue
*3
$3
SET
$9
secondkey
$11
secondvalue
Run Code Online (Sandbox Code Playgroud)
我可以看到像firstkey,firstvalue和SET等,但我的关键字不太明白休息,espcially这些数字都是什么喜欢*2,$6手段,他们在Redis的尝试读取AOF文件,并重建数据库是如何工作的。我在网上也找不到任何文件格式的文档,因此感谢您的帮助!
我正在使用redisnodejs。版本:"redis": "^3.1.2"
当我的服务器连接到 redis 时,出现以下错误:
ERR wrong number of arguments for 'auth' command
Run Code Online (Sandbox Code Playgroud)
我猜它与 URL 有关系,它看起来像这样:
redis://h:<password>@<url>:<port>
Run Code Online (Sandbox Code Playgroud)
我的 redis 由 Heroku 托管,我无法更改 URL。并且不知道我怎样才能让它工作。非常感谢任何想法/解决方案。
node-redis ×10
redis ×9
node.js ×6
asynchronous ×1
database ×1
express ×1
javascript ×1
nosql ×1
redis-server ×1