Saya menganggap penyimpanan kunci-nilai terlalu besar untuk hanya mengulangi semua pasangan kv untuk mencari tahu mana yang dapat kedaluwarsa. Saya juga berasumsi bahwa setiap akses baca menyegarkan stempel waktu kedaluwarsa, jadi hanya item yang belum diakses selama beberapa waktu yang kedaluwarsa.
Tantangannya adalah untuk secara efisien menemukan semua catatan yang dapat kedaluwarsa (setiap kali pembersihan harus dilakukan), tetapi juga secara efisien menyegarkan cap waktu kedaluwarsa pada setiap akses baca (jadi kita harus menemukan kunci dalam struktur yang digunakan untuk kedaluwarsa).
Proposal saya: kelompok expiry_timestamps ke dalam ember; misalnya, jika barang hidup selama 8 jam, buat satu ember per jam. Ember itu disimpan dalam daftar tertaut; ketika kedaluwarsa terjadi, ember pertama dikosongkan dan daftar berkurang. Jumlah bucket adalah rentang umur / pembersihan. Setiap ember berisi hashSet dari semua kunci yang harus kadaluwarsa. Iterasi atas semua kunci dalam hashset cukup efisien.
Selama akses baca, program memeriksa ember mana yang saat ini menjadi kunci dan ember mana yang sekarang menjadi miliknya. Dalam kebanyakan kasus, ini adalah ember yang sama, jadi tidak ada tindakan lebih lanjut yang diperlukan. Kalau tidak, hapus kunci dari ember lama (menghapus dari hash set efisien) dan masukkan ke dalam ember baru.
+--------------+ +--------------+ +--------------+
-->+ Expiry 08:00 +-->+ Expiry 09:00 +-->+ Expiry 10:00 +
| KeySet | | KeySet | | KeySet |
+--------------+ +--------------+ +--------------+