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

Làm thế nào để redis chìa khóa hết hạn?

Nói tóm lại - đối với mỗi đối tượng redis, có một thời gian hết hạn. Trừ khi bạn đặt đối tượng hết hạn, thời gian đó là "không bao giờ".

Bây giờ, cơ chế hết hạn chính nó là nửa lười biếng. Hết hạn lười biếng có nghĩa là bạn không thực sự hết hạn các đối tượng cho đến khi chúng được đọc. Khi đọc một đối tượng, chúng tôi kiểm tra dấu thời gian hết hạn của nó và nếu nó là quá khứ, chúng tôi không trả lại gì và xóa đối tượng khi chúng tôi đang ở đó. Nhưng vấn đề là nếu một chìa khóa không bao giờ được chạm vào, nó chỉ chiếm bộ nhớ mà không có lý do.

Vì vậy, Redis thêm một lớp hết hạn hoạt động ngẫu nhiên thứ hai. Nó chỉ đọc các khóa ngẫu nhiên mọi lúc và khi một khóa hết hạn được chạm vào, nó sẽ bị xóa dựa trên cơ chế lười biếng. Điều này không ảnh hưởng đến hành vi hết hạn, nó chỉ thêm "bộ sưu tập rác" của các khóa đã hết hạn.

Tất nhiên việc triển khai thực tế phức tạp hơn thế này, nhưng đây là ý tưởng chính.

Bạn có thể đọc thêm về nó tại đây:http://redis.io/commands/expire

Và mã nguồn cho chu kỳ hết hạn hoạt động có thể được tìm thấy tại đây:https://github.com/antirez/redis/blob/a92921da135e38eedd89138e15fe9fd1ffdd9b48/src/expire.c#L98



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Sử dụng biến sed trên xargs không hoạt động bên trong mở rộng shell

  2. Tại sao KEYS được khuyên không nên sử dụng trong Redis?

  3. Bộ nhớ đệm khởi động mùa xuân với redis, khóa có \ xac \ xed \ x00 \ x05t \ x00 \ x06

  4. Truy cập một biến trong một chuỗi rails

  5. Memcached có phải là một con khủng long so với Redis?