Key-Valueストレージが大きすぎて、すべてのkvペアを繰り返し処理して、期限切れになる可能性のあるものを見つけることができないと思います。また、各読み取りアクセスで有効期限のタイムスタンプが更新されるため、一定期間アクセスされなかったアイテムのみが期限切れになると想定しています。
課題は、有効期限が切れる可能性のあるすべてのレコードを効率的に見つけることです(クリーンアップの期限が来るたびに)。また、すべての読み取りアクセスで有効期限のタイムスタンプを効率的に更新します(したがって、有効期限に使用される構造でキーを見つける必要があります)。
私の提案:expiry_timestampsをバケットにグループ化します。たとえば、アイテムが8時間存続する場合は、1時間に1つのバケットを作成します。それらのバケットはリンクされたリストに保持されます。期限切れになると、最初のバケットが空になり、リストが減ります。バケットの数は、寿命/クリーンアップ間隔です。各バケットには、期限切れにする必要のあるすべてのキーのhashSetが含まれています。ハッシュセット内のすべてのキーの反復は十分に効率的です。
読み取りアクセス中に、プログラムは、キーが現在どのバケットにあり、どのバケットに現在属しているのかをチェックします。ほとんどの場合、同じバケットであるため、これ以上のアクションは必要ありません。それ以外の場合は、古いバケットからキーを削除し(ハッシュセットから削除すると効率的です)、新しいバケットに挿入します。
+--------------+ +--------------+ +--------------+
-->+ Expiry 08:00 +-->+ Expiry 09:00 +-->+ Expiry 10:00 +
| KeySet | | KeySet | | KeySet |
+--------------+ +--------------+ +--------------+