-
Notifications
You must be signed in to change notification settings - Fork 33
Caching
Chau Nguyen edited this page Jul 29, 2017
·
24 revisions
Right now, the library supports in-memory (JS) caching as well as caching with Redis (see end). These are the default timers that made sense to me.
const endpointCacheTimers = {
// defaults
CHAMPION: cacheTimers.MONTH,
CHAMPION_MASTERY: cacheTimers.SIX_HOURS,
CURRENT_GAME: cacheTimers.NONE,
FEATURED_GAMES: cacheTimers.NONE,
GAME: cacheTimers.HOUR,
LEAGUE: cacheTimers.SIX_HOURS,
STATIC: cacheTimers.MONTH,
STATUS: cacheTimers.NONE,
MATCH: cacheTimers.MONTH,
MATCHLIST: cacheTimers.HOUR,
/*
Match and Matchlist uses the same endpoints in the v3 API,
but should still be cached much differently and so I still provide this option.
*/
RUNES_MASTERIES: cacheTimers.WEEK,
SPECTATOR: cacheTimers.NONE,
STATS: cacheTimers.HOUR,
SUMMONER: cacheTimers.DAY,
TOURNAMENT_STUB: cacheTimers.HOUR, // TODO: ??
TOURNAMENT: cacheTimers.HOUR // TODO: ??
}
If you pass in cacheOptions, but not how long you want each type of request to be cached (cacheTTL object), then by default you'll use the above timers.
To pass in your own custom timers, initialize Kindred like this:
import TIME_CONSTANTS from KindredAPI.TIME_CONSTANTS // for convenience, has a bunch of set timers in seconds
var k = new KindredAPI.Kindred({
key: RIOT_API_KEY,
defaultRegion: REGIONS.NORTH_AMERICA,
debug: true, // you can see if you're retrieving from cache with lack of requests showing
showKey: true, // puts key in the debug urls so that you can easily open the urls in your browser
limits: [ [10, 10], [500, 600] ],
cache: new KindredAPI.InMemoryCache(),
// deprecated 2.0.61 cacheOptions: CACHE_TYPES[0], // in-memory
cacheTTL: {
// All values in SECONDS.
CHAMPION: whatever,
CHAMPION_MASTERY: whatever,
CURRENT_GAME: whatever,
FEATURED_GAMES: whatever,
GAME: whatever,
LEAGUE: whatever,
STATIC: TIME_CONSTANTS.MONTH,
STATUS: whatever,
MATCH: whatever,
MATCHLIST: whatever,
RUNES_MASTERIES: whatever,
STATS: whatever,
SUMMONER: TIME_CONSTANTS.DAY
}
})
You don't have to pass in every single cache timer for it to work.
eg:
cacheTTL: { SUMMONER: 1000 } // valid
To test basic caching, run the below code:
// initialize Kindred QuickStart
k.Summoner.by.name('Contractz')
.then(data => k.Summoner.by.name('Contractz'))
.catch(error => console.error(error))
https://github.com/ChauTNguyen/kindred-api/issues/22
const nonDefaultRedis = new RedisCache({
host: '192.168.0.1',
port: '5005',
keyPrefix: 'helloWorld-',
})
const productionWithNonDefaultRedis = new Kindred({
key: 'myProductionRitoAPIKey',
limits: [[1500, 10], [90000, 600]],
spread: true,
timeout: 5000,
cache: nonDefaultRedis,
})