Nói tóm lại - đối với mỗi đối tượng redis, có một thời gian hết hạn. Trừ khi bạn đặt đối tượng hết hạn, thời gian đó là "không bao giờ".
Bây giờ, cơ chế hết hạn chính nó là nửa lười biếng. Hết hạn lười biếng có nghĩa là bạn không thực sự hết hạn các đối tượng cho đến khi chúng được đọc. Khi đọc một đối tượng, chúng tôi kiểm tra dấu thời gian hết hạn của nó và nếu nó là quá khứ, chúng tôi không trả lại gì và xóa đối tượng khi chúng tôi đang ở đó. Nhưng vấn đề là nếu một chìa khóa không bao giờ được chạm vào, nó chỉ chiếm bộ nhớ mà không có lý do.
Vì vậy, Redis thêm một lớp hết hạn hoạt động ngẫu nhiên thứ hai. Nó chỉ đọc các khóa ngẫu nhiên mọi lúc và khi một khóa hết hạn được chạm vào, nó sẽ bị xóa dựa trên cơ chế lười biếng. Điều này không ảnh hưởng đến hành vi hết hạn, nó chỉ thêm "bộ sưu tập rác" của các khóa đã hết hạn.
Tất nhiên việc triển khai thực tế phức tạp hơn thế này, nhưng đây là ý tưởng chính.
Bạn có thể đọc thêm về nó tại đây:http://redis.io/commands/expire
Và mã nguồn cho chu kỳ hết hạn hoạt động có thể được tìm thấy tại đây:https://github.com/antirez/redis/blob/a92921da135e38eedd89138e15fe9fd1ffdd9b48/src/expire.c#L98