メモリ制限のあるJavaScript向けインメモリキャッシュライブラリを作った
ちょっと仕事でNode.jsでインメモリキャッシュをしたいことがあったのだけど、TTLとかを付けずに可能な限りデータをキャッシュしておきたい場合があった(パージは別のイベント・ドリブンでやる)
そういうときに予め決められたサイズのインメモリキャッシュがあったらいいなーと思ったのだけどなさそうだったので(調べてはいない)作ってみた
こういうふうに使います
code:js
import {Memlim} from "memlim"
const memlim = new Memlim(1024 * 1000 * 1000 * 10); // 10MB cache at the most
memlim.put("a", "aaa"); // put cache with no ttl
memlim.put("b", "bbb", 1000); // with ttl (msec)
memlim.put("bindata", new ArrayBuffer(100)); // binary data
memlim.get("a"); // get data;
memlim.delete("a"); // delete
memlim.freeSize; // total free size
memlim.usedSize; // total used size
memlim.dataCount; // total data count
memlim.clear(); // clear all data
データはstringかArrayBufferを与えられます
stringのサイズ計算はlength * 2でやってます
putで型チェックやってるのでこれ以外は入りません
keyはstringだけを想定しているけど中身は単なるオブジェクトなのでjsでならなんでもできると思う
tsだとエラーになる
使い方はいわゆる普通のメモリなのだけど、違うのはコンテンツの合計サイズが予め設定したサイズを超えると、設定したポリシーに従ってデータがサイズに収まるようにパージされていくという点
オプションで設定する
code:js
const memlim = new Memlim(10, {
overwrite: "oldest"
});
上書きポリシーには以下のものがある
oldestAccess: 最も最古のアクセス日付を持つものから削除していく(デフォルト)
つまり、ホットなキャッシュは削除しないということ
アクセス日付はget()/put()で更新される
oldest: 最も最古に作成されたものから削除していく
minSize: 最も小さいサイズのキャッシュから削除していく
maxSize: 最も大きいサイズのキャッシュから削除していく
clear: すべて削除する