2014-09-02 16 views
17

Tôi có thể đặt TTL toàn cầu bằng redis không? Thay vì thiết lập TTL mỗi khi tôi đặt một khóa.Tôi có thể đặt TTL toàn cầu bằng redis không?

Tôi googled, nhưng không thể tìm thấy bất kỳ đầu mối nào. Vì vậy, có vẻ như không thể được thực hiện?

Cảm ơn.

Trả lời

10

Không, Redis không có khái niệm TTL toàn cầu/mặc định và có, bạn phải đặt mã cho mỗi khóa một cách độc lập. Tuy nhiên, tùy thuộc vào yêu cầu của bạn và về những gì bạn đang cố gắng làm, có thể có những cách khác để đạt được mục tiêu của bạn. Đặt khác đi, tại sao bạn cần nó?

Ví dụ: nếu bạn muốn sử dụng Redis làm bộ nhớ cache và không lo lắng về việc phải xóa các mục "cũ", bạn có thể đơn giản bằng cách đặt maxmemory_policy thành allkey-lru. Điều này sẽ loại bỏ các phím được sử dụng gần đây nhất bất cứ khi nào bộ nhớ Redis bị cạn kiệt.

EDIT: để biết thêm thông tin, hãy xem các liên kết hữu ích trong các nhận xét bên dưới từ @arganzheng và @ Kristján, cũng như tài liệu nội tuyến trong tệp cấu hình redis.conf.

+0

thấy điều này: http://redis.io/topics/config – arganzheng

+1

Ngoài ra http://redis.io/topics/lru-cache –

3

Nếu bạn đang thiết lập một phím, bạn có thể thiết lập TTL trong cùng một lúc: look at the set command

một bên, bạn có thể thực hiện điều này bằng cách mã (trên Linux như thế nào - trong 60 giây):

for k in `redis-cli --raw keys '*'` ; do redis expire $k 60;done 
+0

"khóa" là khủng khiếp trong sản xuất, bởi vì nó đồng bộ khóa cơ sở dữ liệu. Chỉ những cơ sở dữ liệu nhỏ tầm thường mới có thể thoát khỏi điều này. Nếu bạn muốn lặp qua các phím, hãy sử dụng QUÉT. Vấn đề khác với tùy chọn này là nó sẽ thực sự làm mới TTL của tất cả các phím, vì vậy tất cả các phím sẽ tồn tại mãi mãi, trừ khi bạn đảm bảo chạy tập lệnh ít thường xuyên hơn TTL bạn muốn nói. Nếu bạn muốn, quản lý các phiên web, nơi chúng sẽ hết hạn sau 30 ngày, bạn chỉ có thể chạy tập lệnh sau mỗi 31 ngày ... –

Các vấn đề liên quan