【问题标题】:Best way to populate a flat data in Redis cache在 Redis 缓存中填充平面数据的最佳方法
【发布时间】:2021-03-06 20:38:11
【问题描述】:

我想存储 1000 万个彼此不相关的扁平字符串键对值。

key1: one,
key2: two,
key3: three,
...

我正在使用 lambda 函数(其最大 memorySize 为 3008MB,超时时间为 15 分钟)来运行填充函数来存储这些密钥对值。

在获取 SET 之前需要先生成密钥对。

const createKeyPair = (num) => {
  // some methods
}

for (let i = 0; i < 10000000; i+=1) {
  const {key, value} = createKeyPair(i)
  redis.set(key, value, (err)=>{
    if (err) redis.quit(() => {
      error = err;
    }
  })
}
redis.quit(()=>{
  // some operation
})

但是,这种方法占用了巨大的内存和很长时间。我看到 HSET 的性能更好,但数据平坦时是否重要?

我还尝试使用来自ioredis 模块的流水线,并将上面的代码替换为如下:

const pipeline = redis.pipeline();
for (let i = 0; i < 1000000; i+=1) {
  const {key, value} = createKeyPair(i);
  pipeline.set(key, value);
}
pipeline.exec((err, res) => {
  if (err) error = err;
  else if (res) response = res;
  redis.quit();
}

但速度还是一样。

【问题讨论】:

  • 你有没有尝试在不插入redis的情况下运行代码?时间和内存使用情况如何?你确定 Redis 是瓶颈吗?

标签: redis aws-lambda amazon-elasticache node-redis


【解决方案1】:

我的问题是我无法预先生成密钥对值,并且必须在将它们插入缓存之前立即生成它们。因此,瓶颈。

我的解决方案是创建多个集群,以便每个 Lambda 只运行可管理的数量。换句话说,创建许多具有主从关系的 Lambda 函数。

master 会发送每个 slave 工作的数量目标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-08
    • 2010-10-05
    • 2011-11-29
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多