Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9044

Typescript Node.js メソッドの結果をキャッシュする

$
0
0

背景

APIの結果を指定した時間キャッシュさせたかったので、シンプルにキャッシュできるクラスを自前で実装する。

使用ライブラリ

  • ioredis
  • zlib

実装

importioredisfrom'ioredis'importzlibfrom'zlib'classClient{privateredis:ioredis.Redis=newioredis('redis://exammple:6379')asyncfetch<T>(key:string,func:()=>Promise<T>,expire):Promise<T>{constcached=awaitthis.redis.get(key)// キャッシュがあれば、解凍して返却if(cached){constcacheString=awaitnewPromise<string>((resolve,reject)=>zlib.inflate(Buffer.from(cached,'base64'),(err,buffer)=>{if(err)returnreject(err)resolve(buffer.toString())}))returnJSON.parse(cacheString)}// キャッシュがなければ、メソッドの結果を圧縮してredisに保存constresult=awaitfunc()constcache=awaitnewPromise<string>((resolve,reject)=>zlib.deflate(JSON.stringify(result),(err,buffer)=>{if(err)returnreject(err)resolve(buffer.toString('base64'))}))awaitthis.redis.setex(key,expire,cache)returnresult}}exportconstcacheClient=newClient()

使用例

awaitcacheClient.fetch('cache-key',()=>{heavyTask()},3000)

Viewing all articles
Browse latest Browse all 9044