Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Node.js,(Hi)Redis和多命令大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Node.js和redis,并通过此命令安装了hiredis

npm install hiredis redis

我看了这里的多个例子:

https://github.com/mranney/node_redis/blob/master/examples/multi2.js

在第17行,它说

// you can re-run the same transaction if you like

这意味着一旦命令完成执行,内部multi.queue对象永远不会被清除.

我的问题是:你如何处理http环境中的情况?例如,跟踪最后连接的用户(这不需要多个,因为它只执行一个命令,但很容易遵循)

var http = require('http');
redis = require('redis');

client = redis.createClient()
multi = client.multi();

http.createServer(function (request,responsE) {
  multi.set('lastconnected',request.ip); // won't work,just an example
  multi.exec(function(err,replies) {
      console.log(replies);
  });
});

在这种情况下,multi.exec将为第一个连接的用户执行1个事务,为第100个用户执行100个事务(因为永远不会清除内部multi.queue对象).

选项1:我应该在http.createServer回调函数中创建多对象,这会在函数执行结束时有效地终止它吗?创建和销毁这个对象cpu周期有多贵?

选项2:另一个选项是创建一个新版本的multi.exec(),类似multi.execAndClear(),它将redis执行那一堆命令时清除队列.

你会选择哪个选项?我认为选项1更好 – 我们正在杀死一个对象而不是挑选它的一部分 – 我只是想确定,因为我对节点和javascript都是全新的.

解决方法

node_redis中的多个对象创建起来非常便宜.作为副作用,我认为让你重复使用它们会很有趣,但这显然只在某些情况下有用.每次需要新事务时,继续创建一个新的多对象.

要记住的一件事是,如果您确实需要在redis服务器中以原子方式执行所有操作,则应该只使用multi.如果您只想有效地批量处理一系列命令以节省网络带宽并减少必须管理的回调数量,只需依次发送各个命令即可. node_redis将按顺序自动将这些请求“传递”到服务器,并且将按顺序调用各个命令回调(如果有的话).

大佬总结

以上是大佬教程为你收集整理的Node.js,(Hi)Redis和多命令全部内容,希望文章能够帮你解决Node.js,(Hi)Redis和多命令所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。