Tôi giả sử bộ lưu trữ khóa-giá trị quá lớn để chỉ lặp đi lặp lại trên tất cả các cặp kv để tìm ra cái nào có thể hết hạn. Tôi cũng giả định rằng mỗi lần truy cập đọc làm mới dấu thời gian hết hạn, do đó, chỉ những mục không được truy cập trong một thời gian mới hết hạn.
Thách thức là tìm hiệu quả tất cả các bản ghi có thể hết hạn (bất cứ khi nào dọn dẹp), nhưng cũng làm mới hiệu quả dấu thời gian hết hạn trên mỗi lần truy cập đọc (vì vậy chúng tôi phải tìm khóa trong cấu trúc được sử dụng để hết hạn).
Đề xuất của tôi: nhóm expiry_timestamp vào xô; ví dụ: nếu các mặt hàng tồn tại trong 8 giờ, hãy tạo một thùng mỗi giờ. Những thùng đó được giữ trong một danh sách liên kết; khi hết hạn, thùng đầu tiên được làm trống và danh sách giảm. Số lượng xô là khoảng thời gian tuổi thọ / dọn dẹp. Mỗi nhóm chứa một hàm băm của tất cả các khóa sẽ hết hạn. Lặp lại tất cả các khóa trong một bộ băm là đủ hiệu quả.
Trong quá trình truy cập đọc, chương trình sẽ kiểm tra khóa nào hiện tại và khóa nào thuộc về nhóm nào. Trong hầu hết các trường hợp, đó là cùng một nhóm, vì vậy không cần thực hiện thêm hành động nào. Mặt khác, loại bỏ khóa khỏi nhóm cũ (loại bỏ khỏi bộ băm có hiệu quả) và chèn nó vào nhóm mới.
+--------------+ +--------------+ +--------------+
-->+ Expiry 08:00 +-->+ Expiry 09:00 +-->+ Expiry 10:00 +
| KeySet | | KeySet | | KeySet |
+--------------+ +--------------+ +--------------+