我要存储1000万个彼此不相关的扁平字符串密钥对值。
key1: one,
key2: two,
key3: three,
...
我使用lambda函数(最大内存大小为3008mb,超时时间为15分钟)运行populate函数来存储这些密钥对值。
在设置之前,需要先生成密钥对。
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();
}
但速度还是一样。
1条答案
按热度按时间iq0todco1#
我的问题是我不能预生成密钥对值,它们必须在插入缓存之前生成。因此,瓶颈。
我的解决方案是创建几个集群,使得每个lambda只运行可管理的数量。换句话说,创建许多具有主从关系的lambda函数。
主设备将发送每个从设备的数量目标。