操作して学ぶ

LRUキャッシュ可視化

Redis・ブラウザ・OSのページ置換・CPUキャッシュ…あらゆる場所で使われるLRU(Least Recently Used)方式。 GETとPUTを打つたびにキーが最近使った側(MRU)へ移動し、 容量を超えると最も使われていない側(LRU)が追い出される様子を動かして確かめてください。

容量
GETは値を変えず追い出しません(入力欄は共通)

LRU(最も使われていない)← → MRU(最近使った)

(空)
GETヒット率: 0/0使用中: 0 / 2

なぜハッシュマップだけでは足りないか

  • ハッシュマップだけ:キーから値をO(1)で引けるが、「どれが一番使われていないか」の順序は持たない。
  • 双方向連結リストを添える:先頭=LRU、末尾=MRUの順序を持ち、アクセスのたびにノードを末尾へO(1)で移動できる。
  • この可視化の実装:JSのMapは反復順序が挿入順という仕様上の保証があるため、アクセス時にdelete→setで再挿入するだけで同じO(1)の並べ替えが実現できる。