Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Redis:Để đặt thời gian chờ cho một cặp giá trị khóa trong Đặt

Tiếc là không có. "Vùng chứa" của Redis (tức là danh sách, băm, tập hợp và tập hợp được sắp xếp) không hỗ trợ hết hạn cho mỗi thành viên, mặc dù chức năng này đã được yêu cầu nhiều lần trước đây.

Tuy nhiên, bạn có thể thực hiện logic của riêng mình để đạt được kết quả đó. Có một số cách tiếp cận khả thi để giải quyết vấn đề này - đây là một ví dụ. Thay vì sử dụng một tập hợp, hãy sử dụng một tập hợp được sắp xếp (ZSET) và đặt điểm số của mỗi thành viên theo thời gian hết hạn sử dụng các giá trị kỷ nguyên. Ví dụ:loại quy trình công việc này có thể được triển khai bằng cách sử dụng tập lệnh Lua. Để thêm thành viên, hãy sử dụng một cái gì đó như:

redis.call('zadd', KEYS[1], os.time()+ARGV[1], ARGV[2])

và ĐÁNH GIÁ nó bằng cách sử dụng '1 a 60 1' và '1 a 120 2' làm đối số, theo ví dụ của bạn. Để thực sự "hết hạn" các mục khỏi tập hợp, bạn cần phải xóa chúng khi thời gian của chúng đã trôi qua. Bạn có thể làm điều đó bằng cách thực hiện một quy trình định kỳ quét danh sách của bạn hoặc khi truy cập nó. Ví dụ:Lua sau có thể được sử dụng để hết hạn thành viên:

redis.call('zremrangebyscore', KEYS[1], '-inf', os.time())

và ĐÁNH GIÁ nó bằng cách sử dụng '1 a' làm đối số theo ví dụ của bạn.

CHỈNH SỬA:Cách đạt được những điều trên bằng Python

import time
import redis

def add(r, key, ttl, member):
    r.zadd(key, member, int(time.time()+ttl))

def expire(r, key):
    r.zremrangebyscore(key, '-inf', int(time.time()))

...

r = redis.Redis()
add(r, 'a', 1, 60)
add(r, 'a', 2, 120)

# periodically or before every operation do
expire(r, 'a')



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. redis bgsave không thành công vì fork Không thể cấp phát bộ nhớ

  2. Php7 Redis Client trên Alpine OS

  3. Làm thế nào để cấu hình ứng dụng khách Node Redis để xử lý lỗi ngay lập tức, khi kết nối bị lỗi? [ĐỌC CHI TIẾT]

  4. Làm cách nào để cài đặt Predis trên cửa sổ XAMPP?

  5. Kết nối với máy chủ redis từ xa