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

Làm lại, hết hạn phiên và tra cứu ngược

Trên nhánh phát hành hiện tại của Redis (2.6) , bạn không thể có thông báo khi các mặt hàng hết hạn. Nó có thể sẽ thay đổi với các phiên bản tiếp theo.

Trong thời gian chờ đợi, để hỗ trợ yêu cầu của bạn, bạn cần triển khai hỗ trợ thông báo hết hạn theo cách thủ công. Vì vậy, bạn có:

session:<sessionid> -> a hash storing your session data - one of the field is <userid>
user:<userid> -> a set of <sessionid>

Bạn cần xóa sessionid từ người dùng đặt khi phiên hết hạn. Vì vậy, bạn có thể duy trì một nhóm được sắp xếp bổ sung có điểm là dấu thời gian.

Khi bạn tạo phiên 10 cho người dùng 100:

MULTI
HMSET session:10 userid:100 ... other session data ...
SADD user:100 10
ZADD to_be_expired <current timestamp + session timeout> 10
EXEC

Sau đó, bạn cần xây dựng một daemon sẽ thăm dò zset để xác định phiên sẽ hết hạn (ZRANGEBYSCORE ). Đối với mỗi phiên hết hạn, nó phải duy trì cấu trúc dữ liệu:

  • bật phiên ra khỏi zset (ZREMRANGEBYRANK )
  • truy xuất userid phiên (HMGET )
  • xóa phiên (DEL )
  • loại bỏ phiên khỏi bộ userid (SREM )

Khó khăn chính là đảm bảo không có điều kiện chạy đua khi daemon thăm dò và xử lý các vật phẩm. Xem câu trả lời của tôi cho câu hỏi này để biết cách nó có thể được triển khai:

làm thế nào để xử lý phiên hết hạn dựa trên redis?



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Điểm của Nhiều Cơ sở dữ liệu Redis là gì?

  2. Thiết lập ElastiCache Redis với Elastic BeanStalk + Django

  3. Tại sao Redis SortedSet sử dụng Skip List thay vì Balanced Tree?

  4. Làm cách nào để biết kiểu dữ liệu của giá trị của một khóa nhất định?

  5. AWS Lambda và ứng dụng khách Redis. Tại sao tôi gọi lại không được?