在Lodash中构建具有TTL功能的缓存

Building a cache with TTL feature in Lodash

本文关键字:TTL 功能 缓存 Lodash 构建      更新时间:2023-09-26

如何使用Lodash在JavaScript中实现支持超时(TTL)值的缓存?

_.memorize没有TTL功能。

作为一个例子,Adam的答案是使用_.wrap方法:

var myExpensiveFunction = _.wrap(myExpensiveFunction, function(originalFunction, param1) {
  if (/* data is in cache and TTL not expired */){
      // return cachedValue
  } else {
      // run originalFunction(param1) and save cachedValue
      // return cachedValue;
  }
});

如果您的昂贵函数返回promise,请不要忘记返回已解析的promise,而不是直接返回cachedValue(如果存在缓存)。

我不建议使用memoize()。它违背了记忆化的目的,即为给定的一组输入缓存永远不会改变的计算结果。

如果你想建立一个TTL缓存,我建议你看看wrap()。使用它可以用一个进行缓存和TTL检查的通用函数包装您的函数。