ヘッドレスCMSのContenftulでデータ管理をしてNext.jsでレンダリングしようとした時に、API Limitを考慮するためにChacheを導入した。
他サーバーと共通にするまでもなかったので、Redisではなくnode-cacheを導入した。
Technical Limits
To ensure uninterrupted functionality of the shared-service infrastructure, we enforce technical limits.
GitHub – node-cache/node-cache: a node internal (in-memory) caching module
a node internal (in-memory) caching module. Contribute to node-cache/node-cache development by creating an account on GitHub.
install package.
node-cacheをインストールします。
npm install node-cache --save
node-cache
Simple and fast NodeJS internal caching. Node internal in memory cache like memcached.. Latest version: 5.1.2, last published: 4 years ago. Start using node-cac…
code
シングルトンのようにしたかったのでstaticでクラスインスタンスを持ち、
private static instance: NodeCache;
constructorでnewすることで持ち回るようにしています。
constructor() {
if (typeof CacheService.instance === "undefined") {
CacheService.instance = new NodeCache();
}
}
あとは、get、set、必要に応じてキャッシュ削除などのロジックを組み込みます。
setの第3引数はttlをsecondsで指定できるので、自動でキャッシュ削除したい時は設定します。
import NodeCache from "node-cache";
class CacheService {
private static instance: NodeCache;
constructor() {
if (typeof CacheService.instance === "undefined") {
CacheService.instance = new NodeCache();
}
}
set(key: string, value: any) {
CacheService.instance.set(key, value, 60);
}
get(key: string) {
const value = CacheService.instance.get(key);
if (value === "undefined") {
return null;
}
return value;
}
del(keys: string[]) {
CacheService.instance.del(keys);
}
getKeys() {
return CacheService.instance.keys();
}
}
export default new CacheService();