Có thể trong Redis để đặt TTL (thời gian sống) không cho một khóa cụ thể, nhưng đối với một thành viên cho một bộ?TTL cho một thành viên được thiết lập
Tôi đang sử dụng cấu trúc cho các thẻ được đề xuất bởi tài liệu Redis - dữ liệu là các cặp khóa-giá trị đơn giản và các thẻ là tập hợp chứa các khóa tương ứng với từng thẻ, ví dụ:
> SETEX id:id_1 100 'Lorem ipsum'
OK
> SADD tag:tag_1 id:id_1
(integer) 1
Mấu chốt id:id_1
sẽ hết hạn như mong đợi, nhưng tôi không thấy một cách hiệu quả để loại bỏ các thành viên tương ứng từ tập tag:tag_1
. Một trong những cách tôi đưa ra là sử dụng một công việc cron có chứa một kịch bản sẽ loại bỏ các khóa hết hạn từ các bộ định kỳ - bằng cách thêm tất cả các tên thẻ vào một bộ khác và sau đó lặp qua tất cả các thẻ, sau đó tất cả các id tương ứng với mỗi và kiểm tra xem khóa tương ứng có tồn tại không - nếu không, hãy gọi SREM
. Tôi không nghĩ rằng nó sẽ là một cách hiệu quả và tôi có thể muốn giữ các thẻ càng sạch càng tốt, vì kích thước của các bộ sẽ có thể ảnh hưởng đến hiệu suất tìm kiếm theo nhiều thẻ (SINTER
). Có cách nào "nội bộ" hơn không?
Vâng, đó là một cách khá và tôi có thể sẽ xử lý vấn đề với một cái gì đó tương tự. Vì sự tồn tại của các thành viên đã hết hạn trong bộ thẻ không phải là vấn đề theo bất kỳ cách nào khác sau đó hiệu suất, tôi rất có thể sẽ sử dụng một cron istead chạy theo định kỳ của một deamon - để hạn chế các cuộc thăm dò đến mức tối thiểu. – Przemek