TTLで期限切れ「扱い」にするだけではMapエントリが物理削除されず残り続ける(メモリリーク)
パフォーマンス
テスト設計
メモリ管理
キャッシュ
知識
運用
アクセストークン別などキー付きの状態をMap/dictに持ち、取得時に「TTLを過ぎていたら無効」と判定するだけの実装は、エントリ自体が消えずキーが増え続けメモリリークになる。無効判定と物理削除は別問題。
- リクエスト/コンテキスト生成時などのタイミングで、全エントリを走査して期限切れを機会的にprune(物理削除)する。
- pruneのテストは、削除件数を戻り値で直接検証する(例: 境界の手前ではstatusesのみ1件、境界後はcooldownのみ1件)。件数検証ならpruneがno-opに退行した瞬間にredになる。