Я припускаю, що сховище ключа-значення є занадто великим, щоб просто перебирати всі kv-пари, щоб дізнатися, який термін дії може закінчитися. Я також припускаю, що кожен доступ для читання оновлює часову позначку терміну придатності, тому втрачають чинність лише ті елементи, до яких не було доступно протягом певного часу.
Завдання полягає в тому, щоб ефективно знайти всі записи, термін дії яких може закінчитися (щоразу, коли відбудеться очищення), а також ефективно оновити часову позначку терміну дії для кожного доступу для читання (тому ми повинні знайти ключ у структурі, що використовується для закінчення терміну дії).
Моя пропозиція: груповий термін дії відміток у відра; Наприклад, якщо предмети живуть 8 годин, робіть одне відро на годину. Ці відра зберігаються у пов'язаному списку; коли термін придатності відбувається, перше відро спорожняється, а список зменшується. Кількість відра - інтервал життя / очищення. Кожне відро містить хеш-набір усіх ключів, термін дії яких закінчився. Ітерація над усіма ключами хештету досить ефективна.
Під час доступу для читання програма перевіряє, в якому відрі знаходиться ключ, і до якого відра тепер належить. У більшості випадків це одне відро, тому подальших дій не потрібно. В іншому випадку вийміть ключ зі старого відра (вилучення з набору хешів є ефективним) та вставте його у нове відро.
+--------------+ +--------------+ +--------------+
-->+ Expiry 08:00 +-->+ Expiry 09:00 +-->+ Expiry 10:00 +
| KeySet | | KeySet | | KeySet |
+--------------+ +--------------+ +--------------+