转换 Redis 密钥时的内存管理

Memory management when converting redis keys

本文关键字:内存 管理 Redis 密钥 转换      更新时间:2023-09-26

我需要将键从字符串类型转换为哈希。所有键的名称都在设置list:of:keys 中。

我当前的实现如下所示:

var rdbc = require("redis").createClient(6379, '127.0.0.1');
rdbc.smembers("list:of:keys", function(err, strings){
    strings.forEach(function(string, index, strings){
        rdbc.get(string, function(err, result){
            rdbc.del(string);
            rdbc.hset(string, "foo", result);
        });
    });
});

我的尝试奏效了。但是,当list:of:keys包含许多值时,内存使用量会增长很多。

  1. 是否有内存高效的结构来遍历许多键?(尤其是strings.forEach(…似乎效率低下)

  2. 如何通知 node.js 中的垃圾回收器在每次rdbc.del/rbdc.hset操作后进行清理?

  1. 我不知道 node.js 的 redis 驱动程序如何处理这个问题,但如果他们很聪明,他们会使用 redis 提供的一些光标来循环结果。这意味着不要在开始时获取所有结果,它们会在您访问它们时获取它们。

  2. 垃圾收集由 V8(node.js 的底层 JavaScript 引擎)处理,有很多关于它如何工作的文档(只需搜索"垃圾收集 V8"):

    • https://developers.google.com/v8/design#garb_coll
    • 节点.js和 V8 垃圾回收
    • 使用节点进行垃圾回收.js
    • 节点.js"垃圾回收器