问题:
阅读此内容后:
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 !"});
}
});
答案 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);