Redis GETEX

Redis Getex



Redis là kho lưu trữ dữ liệu giá trị-khóa được sử dụng làm bộ nhớ đệm trong bộ nhớ, cơ sở dữ liệu, chuỗi thời gian, công cụ luồng, trình môi giới thông báo, v.v. Vì kho dữ liệu Redis sử dụng định dạng cặp khóa-giá trị đơn giản để lưu giữ dữ liệu, nên nó rất tốn bộ nhớ Có hiệu quả. Ngoài ra, tốc độ truy vấn rất cao với độ phức tạp thời gian thấp như O (1) và O (log (N)). Các khóa Redis có thể chứa các cấu trúc dữ liệu khác nhau, chẳng hạn như chuỗi, tập hợp, băm, tập hợp được sắp xếp và danh sách.

Thông thường, các lệnh GET và SET được sử dụng để lưu trữ và truy xuất các giá trị kiểu chuỗi được lưu trữ tại một khóa Redis nhất định. Hai lệnh này hoạt động với độ phức tạp về thời gian không đổi.







Ngoài ra, lệnh GETEX có sẵn để đọc các giá trị chuỗi được lưu trữ tại một khóa nhất định. Nhưng lệnh này cũng được kết hợp với thao tác ghi song song. Hướng dẫn này sẽ tập trung vào cú pháp lệnh GETEX, các tùy chọn của nó và các trường hợp sử dụng.



TTL của Redis Key

Giá trị thời gian tồn tại (TTL) là thời gian hết hạn của một phần dữ liệu nhất định. Thông thường, một TTL có thể được liên kết với các hàng cơ sở dữ liệu. Bạn cũng có thể đặt thời gian chờ bằng các phím Redis. Vì vậy, một ứng dụng khách Redis có thể kiểm tra những giây còn lại rằng một khóa nhất định sẽ có sẵn trong kho dữ liệu hay không. Redis đưa ra lệnh TTL để kiểm tra thời gian tồn tại giá trị của một khóa nhất định. Nếu không có thời gian chờ nào được liên kết với một khóa được chỉ định, lệnh TTL sẽ trả về -1. Chúng ta sẽ sử dụng lệnh TTL trong các phần tiếp theo để kiểm tra thời gian còn lại của một khóa nhất định.



Lệnh GETEX

Như đã đánh dấu, lệnh GETEX giống với lệnh GET hơn, ngoại trừ việc nó có thể được sử dụng để đặt thời gian hết hạn cho khóa được chỉ định. Hơn nữa, một tùy chọn lệnh có thể xóa giá trị thời gian chờ khỏi một khóa nhất định. Cú pháp lệnh GETEX như sau:





Phím GETEX [ EX timeout_in_seconds | PX timeout_in_milliseconds | EXAT timeout_in_unix-time-seconds | PXAT timeout_in_unix-time-mili giây | PERSIST ]

Chìa khóa: Đây là khóa trỏ đến một giá trị chuỗi.

Các đối số tùy chọn sau đây có thể được sử dụng để đặt thời gian chờ tính bằng giây hoặc mili giây.



VÍ DỤ: Thao tác này sẽ đặt thời gian hết hạn tính bằng giây cho một khóa nhất định.

PX: Giá trị thời gian chờ chính sẽ được đặt bằng mili giây.

Ngoài ra, chúng tôi có thể chỉ định giá trị dấu thời gian UNIX tính bằng giây hoặc mili giây bằng cách sử dụng các tùy chọn lệnh sau EXAT PXAT :

KHÁC: Thời gian hết hạn sẽ được đặt ở định dạng dấu thời gian UNIX và dấu thời gian sẽ tính bằng giây.

PXAT: Thời gian chờ cho một khóa Redis nhất định sẽ được đặt làm dấu thời gian UNIX tính bằng mili giây.

PERSIST: Bằng cách chỉ định điều này, bạn có thể xóa giá trị thời gian tồn tại được liên kết với một khóa được chỉ định.

Lệnh GETEX trả về giá trị của khóa được chỉ định. Lệnh này chỉ hoạt động với các giá trị kiểu chuỗi nhưng không hoạt động với các giá trị băm, danh sách, tập hợp đã sắp xếp, v.v. Nếu bạn chỉ định khóa được liên kết với giá trị không phải chuỗi, lệnh sẽ trả về lỗi. Ngoài ra, nếu khóa đã hết hạn hoặc không tồn tại, lệnh sẽ trả về không.

Trong phần sau, chúng tôi sẽ trình bày cách sử dụng thực tế của lệnh GETEX.

Trường hợp sử dụng - Liên kết đặt lại tạm thời hoặc tạo mã PIN để khôi phục mật khẩu / OTP

Một công ty lưu trữ web đang cung cấp tính năng khôi phục mật khẩu cho người dùng đã đăng ký. Như một biện pháp bảo mật, họ gửi một liên kết URL mới cho người dùng, liên kết này sẽ hết hạn trong vòng 5 phút. Công ty đã sử dụng kho dữ liệu Redis trong một thời gian dài và sử dụng lệnh GETEX để đặt thời gian tồn tại giá trị cho một người dùng nhất định.

Giả sử rằng một người dùng có 1000 user_id yêu cầu khôi phục mật khẩu. Vì vậy, URL khôi phục có thể được lưu trữ tại khóa RecoveryURL: UserID: 1000 . Chúng ta có thể sử dụng lệnh SET để lưu trữ URL khôi phục như sau:

bộ RecoveryURL: UserID: 1000 'https://abc.com/recovery/userid=1000,key=sdfiuoe3290e9rjs'

Hãy kiểm tra xem URL của chuỗi có được lưu trữ đúng cách tại khóa hay không RecoveryURL: UserID: 1000. Chúng ta có thể sử dụng lệnh GETEX như sau:

getex RecoveryURL: UserID: 1000

Đầu ra của lệnh trước được hiển thị như sau:

Nếu chúng ta đã sử dụng lệnh GET thay vì lệnh GETEX, kết quả đầu ra sẽ giống nhau.

Hãy sử dụng lệnh TTL để kiểm tra xem thời gian hết hạn có được liên kết với khóa này hay không.

Ttl RecoveryURL: UserID: 1000

Như mong đợi, -1 đã được trả về bởi lệnh TTL, có nghĩa là không có thời gian hết hạn nào được liên kết với khóa được chỉ định.

Theo ví dụ này, công ty lưu trữ cần đặt thời gian chờ 5 phút cho URL khôi phục. Vì vậy, chúng tôi sẽ sử dụng VÍ DỤ tùy chọn lệnh. Vì 5 phút là 300 giây, chúng ta có thể xây dựng lệnh GETEX như sau:

getex RecoveryURL: UserID: 1000 VÍ DỤ 500

Hãy chạy lệnh TTL một vài lần để kiểm tra thời gian còn lại mà khóa sẽ tồn tại trong kho dữ liệu.

Như dự đoán, thời gian giảm dần, và cuối cùng, RecoveryURL: UserID: 1000 chìa khóa sẽ bị xóa. Sau đây là kết quả sau 5 phút:

-2 đã được trả về bởi lệnh, có nghĩa là khóa đã hết hạn và bị xóa khỏi kho dữ liệu.

Đôi khi, bạn có thể cần phải xóa giá trị thời gian chờ được liên kết với một khóa nhất định. Vì vậy, tùy chọn lệnh PERSIST có thể được sử dụng để xóa một giá trị TTL liên quan đến một khóa được chỉ định.

Hãy tạo một khóa mẫu khác và gán một giá trị chuỗi cho nó. Trong trường hợp này, chúng tôi sẽ chỉ định giá trị TTL tính bằng mili giây bằng cách chuyển PX quyền mua.

bộ KeytoTestPersist 'Điều này sẽ hết hạn trong vòng 60 giây' PX 50000

Tiếp theo, chúng tôi sẽ kiểm tra thời gian còn lại như sau:

Đúng như dự đoán, TTL đang giảm dần. Hãy gọi lệnh GETEX với tùy chọn PERSIST như sau:

getex KeytoTestPersist vẫn tồn tại

Lý tưởng nhất, điều này sẽ xóa TTL được liên kết với khóa này. Hãy kiểm tra TTL để tìm chìa khóa KeytoTestPersist.

Lệnh TTL trả về -1, có nghĩa là không có TTL nào được liên kết với khóa KeytoTestPersist.

Tương tự, GETEX lệnh có thể được sử dụng để đặt thời gian hết hạn cho các khóa trong nhãn thời gian UNIX.

Sự kết luận

Tóm lại, lệnh Redis GETEX có thể được sử dụng để truy xuất các giá trị chuỗi được lưu trữ tại một khóa nhất định giống như lệnh GET. Sự khác biệt duy nhất với lệnh GETEX là nó hỗ trợ thiết lập và loại bỏ thời gian hết hạn cho một khóa nhất định. Nó hỗ trợ một số đối số tùy chọn để chỉ định thời gian hết hạn tính bằng giây, mili giây và dấu thời gian UNIX giây hoặc mili giây. Như đã thảo luận, lệnh cung cấp tùy chọn PERSIST để xóa TTL liên quan cho một khóa nhất định. Nhìn chung, lệnh GETEX hoạt động với độ phức tạp về thời gian không đổi.