在Lodash中使用TTL功能构建缓存

时间:2015-06-21 12:58:35

标签: javascript lodash

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

_.memorize没有TTL功能。

2 个答案:

答案 0 :(得分:2)

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

如果您想构建TTL缓存,我建议您查看wrap()。使用它来使用执行缓存和TTL检查的通用函数来包装函数。

答案 1 :(得分:0)

作为一个例子,亚当回答你可以使用_.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