簡體   English   中英

在 Redis 緩存中填充平面數據的最佳方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM