Trở về

Hướng dẫn quản lý CSDL và Keys trên Redis

bởi Vi Nè

Các lệnh hiển thị trong hướng dẫn này đã được thử nghiệm trên máy chủ Ubuntu 18.04 chạy Redis phiên bản 4.0.9. Để thiết lập một môi trường tương tự, bạn có thể làm theo Bước 1 trong hướng dẫn của tôi về Cách cài đặt và bảo mật Redis trên Ubuntu 18.04. Lưu ý rằng nếu bạn đang sử dụng Redis khác – ví dụ: Redli – thì kết quả của một số lệnh nhất định có thể khác nhau.

1. Quản lý CSDL

Ngoài ra, một phiên bản Redis hỗ trợ 16 cơ sở dữ liệu logic với nhau. Các cơ sở dữ liệu này được tách biệt với nhau và khi bạn chạy một lệnh trong một cơ sở dữ liệu, lệnh đó không ảnh hưởng đến bất kỳ dữ liệu nào được lưu trữ trong cơ sở dữ liệu khác tại phiên bản Redis của bạn.

Cơ sở dữ liệu Redis được đánh số mặc định từ 0 đến 15, bạn kết nối với cơ sở dữ liệu từ 0, tuy nhiên, bạn có thể thay đổi cơ sở dữ liệu đang sử dụng bằng lệnh select sau khi kết nối:

127.0.0.1:6379> select 15

Nếu bạn đã chọn một cơ sở dữ liệu khác 0, nó sẽ được phản ánh trong redis-cli:

127.0.0.1:6379[15]>

Để hoán đổi tất cả dữ liệu hiện có với dữ liệu được giữ trong một cơ sở dữ liệu khác, hãy sử dụng lệnh swapdb. Ví dụ sau sẽ hoán đổi dữ liệu được giữ trong cơ sở dữ liệu 6 với dữ liệu trong cơ sở dữ liệu 8 và bất kỳ máy khách nào được kết nối với một trong hai cơ sở dữ liệu sẽ có thể thấy các thay đổi ngay lập tức:

127.0.0.1:6379>swapdb 6 8

swapdb sẽ trả về OK nếu hoán đổi thành công.

Nếu bạn muốn di chuyển một key sang một phiên bản Redis khác, bạn có thể chạy lệnh di chuyển. Lệnh này đảm bảo key tồn tại trên cá thể đích trước khi xóa nó khỏi cá thể nguồn. Khi bạn chạy di chuyển, lệnh phải bao gồm các phần tử sau theo thứ tự này:

  1. Tên máy chủ hoặc địa chỉ IP của cơ sở dữ liệu đích
  2. Số cổng của cơ sở dữ liệu mục tiêu
  3. Tên của khóa bạn muốn di chuyển
  4. Số cơ sở dữ liệu nơi bạn muốn lưu khóa trên phiên bản đích
  5. Thời gian chờ, tính bằng mili giây, xác định lượng thời gian giao tiếp không tải tối đa giữa hai máy. Lưu ý rằng đây không phải là giới hạn thời gian cho hoạt động, chỉ là hoạt động phải luôn đạt được một số mức độ tiến triển trong khoảng thời gian xác định
127.0.0.1:6379> migrate 203.0.113.0 6379 key_1 7 8000

Ngoài ra, migrate cho phép các tùy chọn sau mà bạn có thể thêm vào sau đối số thời gian chờ:

  • COPY: Chỉ định rằng khóa không được xóa khỏi phiên bản nguồn
  • REPLACE: Chỉ định rằng nếu khóa đã tồn tại trên đích, thì thao tác migrate sẽ xóa và thay thế nó
  • KEYS: Thay vì cung cấp một khóa cụ thể để di chuyển, bạn có thể nhập một chuỗi trống ("") và sau đó sử dụng cú pháp từ lệnh keys để di chuyển bất kỳ key nào phù hợp với một mẫu.

2. Quản lý Keys

Có một số lệnh Redis hữu ích để quản lý các keys bất kể chúng nắm giữ loại dữ liệu nào. Chúng ta sẽ xem xét một vài trong số này.

rename sẽ đổi tên khóa được chỉ định. Nếu thành công, nó sẽ trở lại OK

127.0.0.1:6379>rename old_key new_key

Bạn có thể sử dụng randomkey để trả lại khóa ngẫu nhiên từ cơ sở dữ liệu hiện được chọn:

127.0.0.1:6379> randomkey

Output:

"any_key"

Sử dụng type để xác định loại dữ liệu mà khóa nhất định nắm giữ. Đầu ra của lệnh này có thể là string, list, hash, set, zset, hoặc stream

127.0.0.1:6379> type key_1

Output:

"string"

Nếu khóa được chỉ định không tồn tại, thay vào đó, type sẽ none khi trả về.

Bạn có thể di chuyển một khóa riêng lẻ sang cơ sở dữ liệu khác trong phiên bản Redis của mình bằng lệnh move. move lấy tên của một khóa và cơ sở dữ liệu nơi bạn muốn di chuyển khóa làm đối số. Ví dụ: để di chuyển khóa key_1 sang cơ sở dữ liệu 8, bạn sẽ chạy như sau:

127.0.0.1:6379> move key_1 8

move trả về OK là hoàn tất.

3. Xóa Keys

Để xóa một hoặc nhiều khóa thuộc bất kỳ kiểu dữ liệu nào, hãy sử dụng lệnh del, theo sau là một hoặc nhiều khóa mà bạn muốn xóa:

127.0.0.1:6379> del key_1 key_2

Nếu lệnh key(s) khóa thành công, nó sẽ trả về (integer) 1. Ngược lại, nó sẽ trả về (integer) 0.

Lệnh unlink thực hiện một chức năng tương tự như del, với sự khác biệt là del chặn máy khách khi máy chủ lấy lại bộ nhớ được chiếm bởi key. Nếu khóa liên kết bị xóa với một đối tượng nhỏ, lượng thời gian để del lấy lại bộ nhớ là rất nhỏ và thời gian chặn thậm chí có thể không.

Tuy nhiên, điều đó có thể trở nên bất tiện nếu chẳng hạn, khóa bạn đang xóa được liên kết với nhiều đối tượng, như một hàm có hàng nghìn hoặc hàng triệu trường. Việc xóa khóa như vậy có thể mất một thời gian đáng kể và bạn sẽ bị chặn thực hiện bất kỳ các thao tác nào khác cho đến khi nó bị xóa hoàn toàn khỏi bộ nhớ của máy chủ.

unlink, tuy nhiên, trước tiên xác định phân bổ bộ nhớ do key chiếm dụng. Nếu nó nhỏ thì hãy unlink các chức năng giống như del bằng phím ngay lập tức đồng thời chặn ứng dụng khách. Tuy nhiên, nếu chi phí cao để phân bổ bộ nhớ cho một khóa, việc unlink sẽ xóa key không đồng bộ bằng cách tạo một chuỗi khác và dần dần lấy lại bộ nhớ trong nền mà không chặn ứng dụng khách:

127.0.0.1:6379> unlink key_1

Vì nó chạy trong nền, bạn thường nên sử dụng tính năng unlink để xóa khóa khỏi máy chủ của mình nhằm giảm lỗi cho máy khách của bạn, mặc dù trong nhiều trường hợp, del cũng sẽ đủ.

Để xóa tất cả các khóa trong cơ sở dữ liệu đã chọn, hãy sử dụng lệnh flushdb.

Để xóa tất cả các khóa trong mọi cơ sở dữ liệu trên máy chủ Redis (bao gồm cả cơ sở dữ liệu hiện được chọn), hãy chạy flushall.

Cả flushdbflushall đều chấp nhận tùy chọn không đồng bộ, cho phép bạn xóa tất cả các keys trên một cơ sở dữ liệu duy nhất hoặc mọi cơ sở dữ liệu trong cụm một cách không đồng bộ. Điều này cho phép chúng hoạt động tương tự như lệnh unlink và chúng sẽ tạo một chuỗi mới để giải phóng dần bộ nhớ trong nền.

Chúng tôi tạm dừng chức năng bình luận, mọi thắc mắc vui lòng gửi thông qua mục liên hệ. Xin cám ơn!