Redis EXPIRE Hash Key

Redis Expire Hash Key

Hàm băm Redis là một loại dữ liệu đặc biệt giống với đối tượng JSON, Java HashMap hoặc từ điển Python. Hơn nữa, nó là một tập hợp các cặp giá trị trường có thể được sử dụng để mô hình hóa các đối tượng miền. Cấu trúc dữ liệu băm của Redis cực kỳ hiệu quả về bộ nhớ trong đó mỗi khóa băm có thể lưu trữ tới bốn tỷ cặp giá trị trường. Quan trọng nhất, các hoạt động băm cơ bản như HSET, HGET, HMGET, v.v. hoạt động với độ phức tạp về thời gian không đổi.


Các khóa băm của Redis có thời gian tồn tại vô hạn (TTL) có nghĩa là chúng tồn tại lâu dài, chúng sẽ bị xóa rõ ràng bằng cách sử dụng các lệnh như DEL. Trong bài viết này, chúng tôi sẽ tập trung vào việc thiết lập TTL cho hàm băm của Redis bằng cách sử dụng lệnh EXPIRE.







Redis Lệnh EXPIRE

Lệnh EXPIRE được sử dụng để đặt thời gian chờ trên một khóa nhất định của băm Redis, bộ, danh sách, v.v. Khóa Redis sẽ bị xóa khỏi cơ sở dữ liệu nếu hết thời gian chờ. Quan trọng nhất, thời gian chờ không được xóa cho đến khi nội dung của khóa bị xóa hoặc ghi đè. Việc thay đổi các giá trị được liên kết với một khóa không ảnh hưởng đến thời gian hết hạn.



Cú pháp của lệnh EXPIRE như sau:



EXPIRE key deadline_time_seconds [ NX | GX | GT | LT ]


Chìa khóa: Chìa khóa của Hash, List hoặc Set mà bạn cần đặt thời gian chờ.





expirty_time_seconds: Giá trị thời gian chờ tính bằng giây.

Một số đối số tùy chọn được chấp nhận bởi lệnh EXPIRE.



NX: Giá trị thời gian chờ chỉ được đặt nếu khóa được chỉ định chưa hết hạn.

XX: Khi khóa được chỉ định có giá trị thời gian chờ hiện tại, thời hạn sử dụng mới được đặt.

GT: Nếu giá trị thời gian chờ mới lớn hơn giá trị hiện có, thời hạn sử dụng mới sẽ được đặt.

LT: Giá trị thời gian chờ mới được đặt nếu giá trị hiện có lớn hơn giá trị mới.

Quan trọng nhất, lệnh EXPIRE hoạt động với độ phức tạp về thời gian không đổi. Số nguyên 1 được trả về nếu thực hiện lệnh thành công. Nếu thao tác không thành công do đối số sai hoặc khóa không tồn tại, 0 sẽ được trả về.

Chúng tôi sẽ sử dụng lệnh EXPIRE trên băm để đặt thời gian hết hạn như được hiển thị trong phần sau:

Hết hạn Redis Hash bằng lệnh EXPIRE

Giả sử rằng thông tin phiên của mỗi người dùng được lưu trữ trong hàm băm Redis phiên: id: 1000: người dùng: 10. Chúng ta có thể sử dụng lệnh HMSET để tạo hàm băm Redis với nhiều cặp giá trị trường như sau:

phiên hmset: id: 1000 :người sử dụng: 10 tên tài khoản 'jae' bánh quy 'Vâng' mật khẩu mở khóa '389Ysu2'


Hãy kiểm tra hàm băm đã tạo bằng lệnh HGETALL.

phiên hgetall: id: 1000 :người sử dụng: 10



Ngoài ra, phiên sẽ hết hạn sau 10 giây nếu người dùng không sử dụng trong hơn 60 giây. Hết hạn phiên đạt được bằng cách đặt thời gian hết hạn cho hàm băm lưu trữ thông tin phiên.

Chúng ta có thể sử dụng lệnh EXPIRE như sau:

phiên hết hạn: id: 1000 :người sử dụng: 10 10


Như đã đề cập, giá trị thời gian chờ được đặt thành 10 giây.


Như mong đợi, giá trị trả về là 1 có nghĩa là TTL được đặt thành công cho hàm băm. Hãy kiểm tra thời gian còn lại trước khi khóa băm bị xóa khỏi cửa hàng Redis. Lệnh TTL có thể được sử dụng như sau:

phiên ttl: id: 1000 :người sử dụng: 10



Như được hiển thị trong đầu ra, ba giây còn lại trước khi tự động loại bỏ hàm băm. Sau 10 giây, đầu ra lệnh TTL như sau:


Vì phản hồi số nguyên -2 được chỉ ra, hàm băm không tồn tại.

Đặt thời gian chờ dựa trên sự tồn tại của thời gian hết hạn

Lệnh EXPIRE chấp nhận các đối số NX và XX để đặt thời gian chờ mới dựa trên sự tồn tại của thời gian hết hạn cho một hàm băm được chỉ định. Hãy tạo một hàm băm mới với noTimeOut Chìa khóa .

tên hmset noTimeOut 'kiểm tra'


Hãy thử đặt thời hạn sử dụng mới cho hàm băm trước đó. Ngoài ra, chúng tôi cũng chuyển đối số XX vào lệnh EXPIRE.

hết hạn noTimeOut mười lăm XX


Vì chúng tôi chỉ định XX trong lệnh, thời gian hết hạn sẽ không được đặt. Tùy chọn XX không cho phép bạn đặt thời gian hết hạn mới nếu không có thời gian chờ hiện tại nào được liên kết với khóa băm được chỉ định.


Nếu chúng ta sử dụng NX tùy chọn, giá trị thời gian chờ được đặt thành 15.

hết hạn noTimeOut mười lăm NX



Lệnh EXPIRE trả về trả lời số nguyên 1 có nghĩa là thời gian chờ đã được đặt đúng.

Đặt thời gian chờ dựa trên giá trị thời gian chờ hiện tại

Các tùy chọn GT và LT có thể được sử dụng để đặt thời gian hết hạn băm dựa trên độ dài thời gian chờ hiện có.

Hãy tạo một hàm băm mới có tên là hashWithTimeout.

hmset hashWithTimeout field1 value1


Tiếp theo, chúng tôi đặt thời gian hết hạn 200 giây cho hàm băm.

hết hạn hashWithTimeout 200


Hãy thử đặt thời gian chờ mới là 100 giây cho hàm băm cùng với tùy chọn GT như sau:

hết hạn hashWithTimeout 100 GT


Vì tùy chọn GT đã được chỉ định, lệnh EXPIRE sẽ kiểm tra xem giá trị thời gian chờ mới có lớn hơn giá trị hiện có hay không và đặt thời gian hết hạn mới. Trong ví dụ này, thời gian chờ mới không lớn hơn thời gian chờ hiện có. Do đó, lệnh sẽ không đặt thời gian hết hạn mới và 0 sẽ được trả về.


Hãy sử dụng tùy chọn LT thay vì GT. Vì thời gian hết hạn mới thấp hơn thời gian hiện tại, lệnh sau sẽ đặt thành công thời gian chờ mới.

hết hạn hashWithTimeout 100 LT


Sự kết luận

Tóm lại, lệnh Redis EXPIRE được sử dụng để đặt giá trị TTL cho một khóa nhất định. Theo mặc định, các khóa băm Redis không được liên kết với bất kỳ thời gian chờ nào được gọi là không bay hơi. Như đã thảo luận, lệnh EXPIRE được sử dụng để đặt giá trị thời gian chờ trên hàm băm Redis. Thông thường, hàm băm bị xóa khỏi kho dữ liệu Redis sau khoảng thời gian được chỉ định làm giá trị thời gian chờ. Như được hiển thị trong các ví dụ, lệnh EXPIRE chấp nhận một số đối số tùy chọn như XX, NX, GT và LT để đặt thời hạn băm dựa trên một điều kiện.