Node-redis: 类型错误:无法分配给 decr 的只读属性“回调”

创建于 2016-06-23  ·  6评论  ·  资料来源: NodeRedis/node-redis

  • 版本:节点redis 2.6.2
  • 平台:Ubuntu 14.04 上的节点 4.4.5
  • 说明
    我在尝试减少 redis 中的简单在线计数器时不断收到此错误:
    TypeError: Cannot assign to read only property 'callback' of decr
    at RedisClient.internalSendCommandWrapper (/home/alex/node_modules/newrelic/lib/instrumentation/redis.js:76:22)
    at RedisClient.wrappedFunction [as internal_send_command] (/home/alex/node_modules/newrelic/lib/transaction/tracer/index.js:354:24)
    at RedisClient.(anonymous function).RedisClient.(anonymous function) (/home/alex/node_modules/redis/lib/commands.js:45:25)
    at Socket.eval (eval at <anonymous> (/home/alex/server2.js:2:52), <anonymous>:2456:12)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at Socket.emit (/home/alex/node_modules/socket.io/lib/socket.js:128:10)
    at Socket.onclose (/home/alex/node_modules/socket.io/lib/socket.js:425:8)
    at Client.onclose (/home/alex/node_modules/socket.io/lib/client.js:232:24)
    at Client.onerror (/home/alex/node_modules/socket.io/lib/client.js:213:8)

代码是:

    db.decr('online',function(err){
        if(err){
            console.log('DECREMENTING ONLINE NUMBER FAILED:');
            console.log(err);
        }
        console.log('DECREMENTING ONLINE NUMBER WAS SUCCESSFUL!');
    });

我似乎无法复制它,但只有在网站上有很多人时才会发生。 当只有我和几个朋友在测试它时,它似乎可以很好地增加和减少值。

顺便说一下,即使没有回调函数(只是 db.decr('online')),我只添加了回调,看看它是否会抛出任何错误。

我再说一遍,代码运行良好,直到更多人开始使用它。 也许它正在尝试同时执行 .decr 但它无法处理,或者?

question

最有用的评论

我刚刚用[email protected][email protected]遇到了这个问题。 将 newrelic 设置回 1.28.0 消除了该问题。

但是,使用 redis 2.6.2 和 newrelic 1.28.3 可以正常工作。

所有6条评论

刚刚在日志中注意到 db.get() 调用有时也会抛出类似的错误:

    TypeError: Cannot assign to read only property 'callback' of get
    at RedisClient.internalSendCommandWrapper (/home/alex/node_modules/newrelic/lib/instrumentation/redis.js:76:22)
    at RedisClient.wrappedFunction [as internal_send_command] (/home/alex/node_modules/newrelic/lib/transaction/tracer/index.js:354:24)
    at RedisClient.(anonymous function).RedisClient.(anonymous function) (/home/alex/node_modules/redis/lib/commands.js:45:25)
    at eval (eval at <anonymous> (/home/alex/server2.js:2:52), <anonymous>:2384:16)
    at checkLogin (eval at <anonymous> (/home/alex/server2.js:2:52), <anonymous>:572:13)
    at Socket.eval (eval at <anonymous> (/home/alex/server2.js:2:52), <anonymous>:2001:9)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at Socket.onevent (/home/alex/node_modules/socket.io/lib/socket.js:335:8)
    at Socket.onpacket (/home/alex/node_modules/socket.io/lib/socket.js:295:12)

代码:

            db.get('triviaAnswer',function(err,dbAnswer){
                if(err){
                    console.log('Error getting triviaAnswer from redis: '+err);
                    return;
                }

此外,'online' 和 'triviaAnswer' 字段已经设置,上面的代码一直有效,直到......好吧,直到它没有。 它也不是“新”代码,它已经在不同的服务器上工作了数周,所以我怀疑这是否存在问题。

这似乎是 newrelic 的问题,因此我建议就此与他们联系。 很抱歉我不能再帮助你了,因为我自己不会使用新遗物。

原来如此,谢谢。

@Alchemystic你介意详细介绍一下这个修复吗? 我也用 NR 在本地找到了这个,但是升级2.6.2(从 2.6.0-1)似乎对我来说修复了它,所以要确保这不仅仅是一个红鲱鱼。

我刚刚停止使用newrelic。 我只是用它来诊断网络问题,但在发现它导致问题后,我将其删除。

我刚刚用[email protected][email protected]遇到了这个问题。 将 newrelic 设置回 1.28.0 消除了该问题。

但是,使用 redis 2.6.2 和 newrelic 1.28.3 可以正常工作。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

Atala picture Atala  ·  3评论

strumwolf picture strumwolf  ·  4评论

shmendo picture shmendo  ·  6评论

juriansluiman picture juriansluiman  ·  3评论

jackycchen picture jackycchen  ·  4评论