【发布时间】: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