Node.js、(Hi)Redis 和 multi 命令

2023-12-31

我正在使用 node.js 和 redis,并通过此命令安装了hiredis 库

npm install hiredis redis

我在这里查看了多个示例:

https://github.com/mranney/node_redis/blob/master/examples/multi2.js 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环境下你会如何处理这种情况?例如,跟踪最后一个连接的用户(这实际上并不需要 multi,因为它只执行一个命令,但很容易遵循)

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 执行时清除队列that一堆命令。

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


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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js、(Hi)Redis 和 multi 命令 的相关文章

随机推荐

  • 鼠标操作在量角器中无法正常工作

    我正在尝试上传图像 但是当我上传时 图像的某些部分可能会被剪切 所以我们可以选择裁剪该图像 所以我拖动图像的两侧并单击上传按钮 所以单击上传按钮后 它成功上传手动执行时图像的完整部分 当我通过自动化脚本执行所有这些操作时 图像似乎没有完全上
  • 过程式编程的依赖注入

    假设我决定用 C 或任何其他过程编程语言编写一个大型应用程序 它具有具有调用依赖性的函数 如下所示 A B1 B2 C11 C12 C21 C22 显然 对叶子函数 C11 C12 C21 和 C22 进行单元测试非常简单 设置输入 调用函
  • 如何在 VS 2017.3 中引用 .NET 4.6 NuGet 包时隐藏 .NET Core 兼容性警告

    我正在开发一个 NET Core CLI 应用程序 该应用程序需要引用尚未发布的第 3 方 NuGet 包netcoreappX X目标 我已经运行了分析项目可移植性工具并得到100 兼容性 这是预期的 因为这是一个相对简单的库 然后问题就
  • 在 jQuery Mobile 中加载大型嵌套列表的最快方法是什么?

    我有一个大型嵌套数组 是通过在 PHP 中解析 CSV 文件生成的 我让它以 JSON 格式输出 并让我的 jQuery Mobile 站点获取它 然后将其解析为 DOM 列表 ul li 这在我的桌面浏览器上运行良好 但在我的移动设备上似
  • 本地主机拒绝连接 - MAMP Pro

    似乎有几个类似的问题但找不到答案 一小时前 以及之前的几个月 一切正常 看起来更新到 XCode 9 2 后一切都停止了 我刚刚更新到 MacOS High Sierra 10 13 2 因为其中包含一些 Apache 更新 但它没有解决问
  • Android 中的可滚动选项卡样式

    我想实现一个带有两层选项卡的导航 类似于此 但是 我找不到如何为可滚动选项卡提供这种外观 活动选项卡的标题居中 其他选项卡推到两侧 没有分隔符或下划线 我很确定我以前见过这种可滚动选项卡样式 所以我想知道它是否只是一个设置或者可能是第三方库
  • Android 最近的应用程序缩略图

    我的应用程序在 ICS 和 JB 设备上的最新应用程序列表中显示不正确 缩略图被剪切 扭曲 有时我的应用程序会出现完全不同的应用程序的屏幕截图 某些活动可能不会显示 尽管它们没有标记为从近期排除 可能出现什么问题以及我应该如何解决该问题 N
  • 向 Kibana 仪表板应用只读权限?

    有没有办法在与其他人共享 kibana 仪表板时设置某种权限 我担心有人会删除它或进行更改并保存它 我用谷歌搜索但没有找到任何东西 自从提出这个问题以来 发生了很多事情 自 5 月份起 基于角色的访问控制现已在社区版中提供 https ww
  • yargs 仅采用命令行输入字符串的第一个单词

    我正在教程中开发一个 Node js 命令行天气应用程序 我意识到当我输入一个字符串作为输入时 仅采用第一个单词 该字符串被拆分为一个单词数组 并且仅返回第一个单词 app js const yargs require yargs cons
  • iPhone - 如何识别我的应用程序的 iTunes 用户

    有一些应用程序似乎可以识别 iPhone 的 iTunes 用户 我需要开发一个支持 订阅 类型的应用内购买的应用程序 Apple 希望我的应用程序在每个用户的设备 iPhone iPod iPad 上授予订阅权限 为此 我可以构建一个服务
  • 创建表命令 SQL 缺少右括号

    创建下表时 我收到错误消息 ORA 00907 缺少右括号 create table CustomerOrder CustomerOrderNumber NUMBER 15 CONSTRAINT Customer Order Number
  • 如何在 F# 中实现 beta 缩减函数?

    我正在用 F 编写 lambda 演算 但我一直坚持实现 beta 约简 用实际参数替换形式参数 lambda x e f gt e f x 使用示例 lambda n n 2 3 7 gt n 2 3 7 n gt 7 2 3 所以我很想
  • html如何将H1、H2等设为链接?

    将 h1 h2 等标题转换为链接的正确代码是什么 search engines标题和链接的索引文本 Is it a href h1 heading h1 a or h1 a href heading a h1 谁能解释为什么 每这里 htt
  • 我可以使用资源字符串作为包名称吗?

    这样的事情可能吗
  • Vaadin 23 错误:找不到模块“@vaadin/build-status-plugin”

    我正在尝试从 Vaadin 18 升级到 Vaadin 23 执行升级说明中列出的步骤后 我在获取前端构建时遇到了大量问题 最新的阻止程序是启动应用程序后 npm 运行 但我看到以下错误 我检查了node modules文件夹 build
  • Go模板和函数

    在我的 go 代码中我经常使用if像这样 if user user Registered go 模板中的等效代码是 if and User User Registered end 不幸的是 如果模板中的代码失败 User is nil 在g
  • 将 NSDecimalNumber 转为负数

    我正在寻找一种方法来扭转NSDecimalNumber乘以负数 1 decNumber is the one I would like to turn negative NSDecimalNumber decNumber values ob
  • getter 是否应该返回对象实例的副本以避免副作用?

    我想获取从类的函数返回的值 在我的班级里 public class MyClass private Color color new Color 0f 0f 0f 1f public Color getColor return this co
  • 多维 np.argmax?

    我有一个形状为 n n g 的 3D 数组 并且我需要每个 n n argmax 即结果应该是每个长度为 g 的两个索引向量 x y 直观的解决方案是 array np random uniform size 5 5 1000 np arg
  • Node.js、(Hi)Redis 和 multi 命令

    我正在使用 node js 和 redis 并通过此命令安装了hiredis 库 npm install hiredis redis 我在这里查看了多个示例 https github com mranney node redis blob