如何在riot-lol-api npm软件包中使用缓存?

时间:2018-11-09 13:50:52

标签: javascript node.js caching

问题:

阅读此内容后:

https://www.npmjs.com/package/riot-lol-api#caching

我还是很困惑。这是我第一次尝试缓存api响应。

例如,我不知道YOUR_CACHE_STRATEGY有哪些可用值,文档中也没有说明。

本质上,我会寻找一个示例,例如如何将/lol/summoner/v3/summoners/by-name/的响应缓存并保存5分钟?


代码:

riotRequest.request(region.toLowerCase(), 'summoner', '/lol/summoner/v3/summoners/by-name/'+encodeURI(player), function(err, data) {
            if (!err) {
                var summonerID = data.id;
            } else {
                console.error("ERROR1: "+err);
                res.render("page", {errorMessage: "Player not found !"});
            }
        });

1 个答案:

答案 0 :(得分:1)

文档的确不是很详细。您需要做的基本上是实现文档(注释区域)中的代码示例中指定的缓存对象。

下面是一个缓存到内存中的数组的示例。您还可以按照文档中的建议将该数组保存到文件或Redis数据库中。

//cacheData holds objects of type {key: 123, value: "request data"}
var cacheData = []
var cacheIndex = 0

function deleteFromCache(key) {
  for (var i = 0; i < cacheData.length; i++) {
    if (cacheData[i].key == key) {
      cacheData.splice(i, 1);
      return;
    }
  }
}

var cache = {
  get: function(region, endpoint, cb) {       
    for (var entry of cacheData) {
      if (entry.value == data) {
        //we have a cache hit
        return cb(null, entry.value);
      }      
    }
    return cb(null, null);
  },
  set: function(region, endpoint, cacheStrategy, data) {
    var key = cacheIndex++;
    var value = data;

    cacheData.push({key, value});

    //cacheStrategy is a number representing the number of seconds to keep the data in cache
    setTimeout(() => {
      deleteFromCache(key);
    }, cacheStrategy * 1000);    
  }
};

YOUR_CACHE_STRATEGY是一个对象,该对象通过set参数传递给您的cacheStrategy函数。他们建议它可以是代表缓存条目寿命的数字,因此我实现了一个计时器,用于在等于cacheStrategy的秒数之后删除缓存条目。

您将使用以下电话号码拨打请求:

riotRequest.request(region.toLowerCase(), 'summoner', '/lol/summoner/v3/summoners/by-name/'+encodeURI(player), 30, function(err, data) {//.....

要启用缓存,您需要将cache对象传递给RiotRequest的构造函数:

var riotRequest = new RiotRequest('my_api_key', cache);