[英]Best way to populate a flat data in Redis cache
我想存儲 1000 萬個彼此不相關的扁平字符串密鑰對值。
key1: one,
key2: two,
key3: three,
...
我正在使用 lambda 函數(最大內存大小為 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();
}
但速度還是一樣。
我的問題是我無法預先生成密鑰對值,並且必須在將它們插入緩存之前生成它們。 因此,瓶頸。
我的解決方案是創建多個集群,以便每個 Lambda 僅運行可管理的數量。 換句話說,創建許多具有主從關系的 Lambda 函數。
主站將發送每個從站工作的數量目標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.