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

Thông báo hết hạn khóa trong redis python

Điều bất ngờ (không có sự kiện hết hạn nào được thấy khi thời gian tồn tại của một khóa đạt đến 0) không liên quan đến Python mà ngược lại, Redis sắp hết hạn các khóa.

Tài liệu của Redis về Thời gian của các sự kiện đã hết hạn

Thời gian của các sự kiện đã hết hạn

Các khóa có thời gian tồn tại được Redis liên kết sẽ hết hạn theo hai cách:

  • Khi khóa được truy cập bằng lệnh và được phát hiện là khóa đã hết hạn.
  • Thông qua hệ thống nền để tìm kiếm các khóa hết hạn trong nền, tăng dần, để có thể thu thập các khóa không bao giờ được truy cập.

Các sự kiện hết hạn được tạo khi một khóa được truy cập và bị một trong các hệ thống trên phát hiện là đã hết hạn, do đó không có gì đảm bảo rằng máy chủ Redis sẽ có thể tạo sự kiện hết hạn tại thời điểm khóa tồn tại. đạt đến giá trị bằng không.

Nếu không có lệnh nào nhắm mục tiêu khóa liên tục và có nhiều khóa có TTL được liên kết, có thể có độ trễ đáng kể giữa thời gian thời gian tồn tại của khóa giảm xuống 0 và thời gian tạo ra sự kiện hết hạn.

Các sự kiện hết hạn về cơ bản được tạo khi máy chủ Redis xóa khóa và không phải khi thời gian sống về mặt lý thuyết đạt đến giá trị bằng không.

Thử nghiệm nhỏ trên bảng điều khiển

khi Redis đang chạy ($ sudo service redis-server start )

Tôi đã bắt đầu một bảng điều khiển và đã đăng ký:

$ redis-cli
PSUBSCRIBE "__key*__:*"

Sau đó, trong một bảng điều khiển khác:

$ redis-cli
> config set notify-keyspace-events AKE

những gì sẽ đăng ký cho tất cả các loại sự kiện

Sau đó, tôi tiếp tục với các thử nghiệm trong bảng điều khiển thứ hai này:

> set aaa aaa
> del aaa
> set aaa ex 5
> get aaa

Tất cả các hoạt động đã được xem trong bảng điều khiển đã đăng ký. Chỉ có thời hạn khóa đôi khi bị trễ vài giây, đôi khi đến đúng lúc.

Xin lưu ý, có sự khác biệt nhỏ trong các tin nhắn, một tin nhắn [email protected]__:expire [email protected]__:expired khác .

Trình nghe mẫu spy.py

import redis
import time

r = redis.StrictRedis()
pubsub = r.pubsub()
pubsub.psubscribe("*")
for msg in pubsub.listen():
    print time.time(), msg

Mã này đăng ký tất cả các kênh hiện có ở chế độ redis mặc định và in bất cứ thứ gì được xuất bản.

Chạy nó:

$ python spy.py

và trong một bảng điều khiển khác, hãy thử đặt khóa có thời hạn. Bạn sẽ thấy tất cả các sự kiện.

Để biết thông tin nhập redis-cli sau đây.

$ redis-cli
127.0.0.1:6379> set a aha
OK
127.0.0.1:6379> set b bebe ex 3
OK
127.0.0.1:6379> set b bebe ex 3
OK

chúng tôi nhận được đầu ra gián điệp:

1401548400.27 {'pattern': None, 'type': 'psubscribe', 'channel': '*', 'data': 1L}
1401548428.36 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:a', 'data': 'set'}
1401548428.36 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:set', 'data': 'a'}
1401548436.8 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:b', 'data': 'set'}
1401548436.8 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:set', 'data': 'b'}
1401548436.8 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:b', 'data': 'expire'}
1401548436.8 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:expire', 'data': 'b'}
1401548439.82 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:b', 'data': 'expired'}
1401548439.82 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:expired', 'data': 'b'}
1401548484.46 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:b', 'data': 'set'}
1401548484.46 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:set', 'data': 'b'}
1401548484.46 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:b', 'data': 'expire'}
1401548484.46 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:expire', 'data': 'b'}
1401548487.51 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:b', 'data': 'expired'}
1401548487.51 {'pattern': '*', 'type': 'pmessage', 'channel': '[email protected]__:expired', 'data': 'b'}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. làm thế nào để luôn cập nhật bộ nhớ đệm

  2. làm thế nào để kiểm tra phiên bản redis instance?

  3. Làm cách nào để xóa mọi thứ trong Redis?

  4. không thể kết nối với vùng chứa redis từ vùng chứa ứng dụng

  5. Làm cách nào để tôi có thể duyệt / xem các giá trị được lưu trữ trong Redis