Redis: có thể hết hạn một phần tử trong mảng hoặc tập hợp đã sắp xếp?


124

Có phải hiện tại chỉ có thể hết hạn toàn bộ cặp khóa / giá trị không? Điều gì sẽ xảy ra nếu tôi muốn thêm các giá trị vào cấu trúc kiểu Danh sách và chúng bị tự động xóa 1 giờ sau khi chèn. Điều đó hiện có thể thực hiện được không, hay nó sẽ yêu cầu chạy một công việc cron để thực hiện xóa thủ công?

Câu trả lời:


76

Có phải hiện tại chỉ có thể hết hạn toàn bộ cặp khóa / giá trị không?

Theo như tôi biết, và cũng theo các lệnh chính và tài liệu về hết hạn , hiện tại bạn có thể đặt thời hạn chỉ cho một khóa cụ thể chứ không phải cho cấu trúc dữ liệu cơ bản của nó. Tuy nhiên, có một cuộc thảo luận trên các nhóm google về chức năng này với các giải pháp thay thế được nêu ra.


1
Bất kỳ ý tưởng nào kể từ bây giờ tháng 7 năm 2016 họ đã hỗ trợ điều này trong phiên bản mới hơn?
Kamran Shahid

1
@KamranShahid có gì về cái này không ??
Prakash Kumar

1
Nop Prakash chưa.
Kamran Shahid

3
Câu trả lời này có còn phù hợp sau 8 năm?
simo

2
Đúng vậy, phần tử hết hạn trong cấu trúc dữ liệu lồng nhau không được Redis hỗ trợ.
Itamar Haber

94

Có một mô hình chung giải quyết vấn đề này khá tốt.

Sử dụng các tập hợp đã sắp xếp và sử dụng dấu thời gian làm điểm số. Sau đó, việc xóa các mục theo phạm vi điểm là điều tầm thường, có thể được thực hiện định kỳ hoặc chỉ trên mỗi lần ghi, với các lần đọc luôn bỏ qua các yếu tố nằm ngoài phạm vi, bằng cách chỉ đọc một phạm vi điểm.

Thêm tại đây: https://groups.google.com/forum/#!topic/redis-db/rXXMCLNkNSs


7
Giải pháp tốt, nhưng tôi muốn redis hỗ trợ điều này đúng cách. Đó là một yêu cầu phổ biến và không nên yêu cầu các cách giải quyết phức tạp.
UpTheCreek

14
Tôi không biết, tôi thực sự hạnh phúc khi họ gắn bó với súng của mình - mở rộng tính năng theo cách họ không muốn hoặc không lên kế hoạch đồng nghĩa với việc hy sinh thiết kế. Xây dựng chức năng bổ sung trên những giải pháp hàng đầu có vẻ như là giải pháp hoàn hảo và để Redis làm những gì nó làm một cách xuất sắc
Kieren Johnstone

redis là hoàn hảo như nó vốn có - thiết kế đơn giản, sạch sẽ và hành vi có thể dự đoán được dẫn đến nhiều hơn hiệu suất tuyệt vời
let4be

1
Giải pháp tuyệt vời, chúng tôi cũng có thể sử dụng một danh sách 50o đơn giản, nơi chúng tôi giữ một danh sách và chỉ cần lấy 5 phần tử đầu tiên và khi danh sách lớn hơn 5 + N tùy thuộc vào khả năng mở rộng, chúng tôi xóa khóa và bắt đầu lại. Đơn giản, dễ dàng và chính xác các thuật toán Redis phải như thế nào. Thuật toán này cung cấp cho hệ thống báo cáo của chúng tôi nhiều thời gian để truy vấn danh sách và xem người dùng đăng nhập bằng thiết bị nào. Đồng ý với @KierenJohnstone, Redis được thiết kế để tạo ra kiến ​​trúc xung quanh nó và hoàn hảo theo đúng nguyên trạng của nó.
Ligemer

1

Tôi đã tìm ra một phương pháp khác để xử lý vấn đề này, không biết nó có hữu ích cho bất kỳ ai trong số các bạn không, nhưng đây là:

Hàm băm và tập hợp đã sắp xếp được liên kết với nhau bằng một hướng dẫn.

  1. Tôi có một hàm băm được đặt để hết hạn sau 'x' giây
  2. Tôi có một tập hợp được sắp xếp được sử dụng cho các truy vấn khác nhau
  3. Dữ liệu cho cả hai được thêm vào trong một giao dịch, vì vậy nếu một trong hai không thành công, cả hai đều không thành công.
  4. Trên một truy vấn có phạm vi, hãy sử dụng 'EXISTS' để xem liệu giá trị được băm có tồn tại hay không khi kết quả được lặp lại
  5. Nếu nó không tồn tại, nó đã hết hạn, vì vậy hãy xóa mục khỏi nhóm đã sắp xếp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.