Cách quản lý database và khóa Redis
Redis là một repodata key-value open-souce trong bộ nhớ. Kho dữ liệu key-value là một loại database NoSQL trong đó các khóa đóng role là số nhận dạng duy nhất cho các giá trị liên quan của chúng. Bất kỳ cá thể Redis đã cho nào đều bao gồm một số database , mỗi database có thể chứa nhiều khóa khác nhau của nhiều kiểu dữ liệu .Trong hướng dẫn này, ta sẽ xem xét cách chọn database , di chuyển khóa giữa các database , quản lý và xóa khóa.
Cách sử dụng Hướng dẫn này
Hướng dẫn này được viết như một bảng lừa đảo với các ví dụ riêng. Ta khuyến khích bạn chuyển đến bất kỳ phần nào có liên quan đến nhiệm vụ bạn đang cố gắng hoàn thành.
Các lệnh hiển thị trong hướng dẫn này đã được thử nghiệm trên  server  Ubuntu 18.04 chạy Redis version  4.0.9 . Để  cài đặt  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  ta  về Cách cài đặt và bảo mật Redis trên Ubuntu 18.04 .  Ta  sẽ chứng minh các lệnh này hoạt động như thế nào bằng cách chạy chúng với redis-cli , giao diện dòng lệnh Redis.  Lưu ý  nếu bạn đang sử dụng một giao diện Redis khác - ví dụ như Redli - kết quả  kết quả  chính xác của một số lệnh nhất định có thể khác nhau.
Ngoài ra, bạn có thể cung cấp một version database Redis được quản lý để kiểm tra các lệnh này, nhưng lưu ý tùy thuộc vào mức độ kiểm soát được nhà cung cấp database của bạn cho phép, một số lệnh trong hướng dẫn này có thể không hoạt động như được mô tả. Để cung cấp Dịch vụdatabase DigitalOcean, hãy làm theo tài liệu sản phẩm Dịch vụdatabase của ta . Sau đó, bạn phải cài đặt Redli hoặc cài đặt tunnel TLS để kết nối với Dịch vụdatabase qua TLS.
Quản lý database
Ngoài ra, một version Redis hỗ trợ 16 database logic. Các database này được tách biệt với nhau một cách hiệu quả và khi bạn chạy một lệnh trong một database , nó không ảnh hưởng đến bất kỳ dữ liệu nào được lưu trữ trong các database khác trong version Redis của bạn.
 Database  Redis được đánh số từ 0 đến 15 và theo mặc định, bạn kết nối với database  0 khi bạn kết nối với version  Redis  của bạn . Tuy nhiên, bạn có thể thay đổi database  đang sử dụng bằng lệnh select sau khi kết nối:
- select 15
Nếu bạn đã chọn một database  khác 0 , nó sẽ được phản ánh trong  dấu nhắc  redis-cli :
Để  swap  tất cả dữ liệu được giữ trong một database  với dữ liệu được giữ trong một database  khác, hãy sử dụng lệnh swapdb . Ví dụ sau sẽ  swap  dữ liệu được giữ trong database  6 với dữ liệu trong database  8 và bất kỳ client  nào được kết nối với một trong hai database  sẽ có thể thấy các thay đổi ngay lập tức:
- swapdb 6 8
swapdb sẽ trả về OK nếu  swap  thành công.
Nếu bạn muốn di chuyển một khóa sang một version  Redis khác, bạn có thể chạy migrate . Lệnh này đảm bảo khóa 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 migrate , lệnh phải bao gồm các phần tử sau theo thứ tự này:
- Tên server hoặc địa chỉ IP của database đích
- Số cổng của database đích
- Tên của khóa bạn muốn di chuyển
- Số database nơi bạn muốn lưu khóa trên version đích
- 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 ý đâ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ố tiến độ trong repository ảng thời gian xác định
Để minh họa:
- 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 sau đối số thời gian chờ:
- COPY: Chỉ định rằng khóa không được xóa khỏi version nguồn
- REPLACE: Chỉ định rằng nếu khóa đã tồn tại trên đích, hoạt động- migratesẽ 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ỳ khóa nào phù hợp với một mẫu. Để biết thêm thông tin về cách hoạt động của- keys, hãy xem hướng dẫn của ta về Cách khắc phục sự cố trong Redis .
Quản lý các phím
Có một số lệnh Redis hữu ích để quản lý các khóa dù chúng nắm giữ loại dữ liệu nào. Ta sẽ xem xét một vài trong số này trong phần này.
rename sẽ đổi tên khóa được chỉ định. Nếu thành công, nó sẽ trả về OK :
- rename old_key new_key
Bạn có thể sử dụng randomkey để trả về một khóa ngẫu nhiên từ database  hiện đang được chọn:
- randomkey
"any_key"
Sử dụng type để xác định loại dữ liệu mà khóa đã cho nắm giữ. Đầu ra của lệnh này có thể là string , list , hash , set , zset hoặc stream :
- type key_1
"string"
Nếu khóa được chỉ định không tồn tại, thay vào đó, type sẽ none trả về.
Bạn có thể di chuyển một private key  lẻ sang database  khác trong version  Redis  của bạn  bằng lệnh move . move lấy tên của một khóa và database  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 database  8 , bạn sẽ chạy như sau:
- move key_1 8
move sẽ trở lại OK nếu di chuyển khóa thành công.
Xóa các phím
Để xóa một hoặc nhiều khóa của 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:
- del key_1 key_2
Nếu lệnh này xóa (các) khóa thành công, nó sẽ trả về (integer) 1 . Nếu không, 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 client  khi  server  lấy lại bộ nhớ được chiếm bởi khóa. Nếu khóa đang bị xóa được liên kết 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 đáng chú ý.
Tuy nhiên, nó 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, chẳng hạn như một hàm băm với 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ỳ thao tác nào khác cho đến khi nó bị xóa hoàn toàn khỏi bộ nhớ của server .
Tuy nhiên, unlink , trước tiên xác định chi phí của việc phân bổ bộ nhớ mà khóa chiếm dụng. Nếu nó nhỏ thì hãy unlink chức năng giống như cách del bằng phím ngay lập tức đồng thời chặn client . Tuy nhiên, nếu có chi phí cao để phân bổ bộ nhớ cho một khóa, việc unlink sẽ xóa khóa không đồng bộ bằng cách tạo một stream  khác và dần dần lấy lại bộ nhớ trong nền mà không chặn client :
- unlink key_1
Vì nó chạy ở chế độ nền, nên thường bạn nên sử dụng unlink để xóa khóa khỏi  server   của bạn  nhằm giảm lỗi trên client  của bạn, mặc dù trong nhiều trường hợp, del cũng sẽ đủ.
Cảnh báo: Hai lệnh sau được coi là nguy hiểm . Các flushdb và flushall sẽ xóa tất cả các khóa trong một database  và tất cả các khóa trong mọi database  trên  server  Redis một cách  không phục hồi được .  Ta  khuyên bạn chỉ nên chạy các lệnh này nếu bạn hoàn toàn chắc chắn rằng bạn muốn xóa tất cả các khóa trong database  hoặc  server   của bạn .
Bạn có thể quan tâm đến việc đổi tên các lệnh này thành một thứ gì đó với khả năng bị vô tình chạy thấp hơn.
Để xóa tất cả các khóa trong database  đã chọn, hãy sử dụng lệnh flushdb :
- flushdb
Để xóa tất cả các khóa trong mọi database  trên  server  Redis (bao gồm cả database  hiện được chọn), hãy chạy flushall :
- flushall
Cả flushdb và flushall chấp nhận tùy chọn async , cho phép bạn xóa tất cả các khóa trên một database  duy nhất hoặc mọi database  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.
Backup database của bạn
Để tạo bản  backup  của database  hiện được chọn, bạn có thể sử dụng lệnh save :
- save
Thao tác này sẽ xuất một ảnh chụp nhanh của tập dữ liệu hiện tại dưới dạng file  .rdb , là file  kết xuất database  chứa dữ liệu ở định dạng tuần tự hóa nén nội bộ.
save chạy đồng bộ và sẽ chặn bất kỳ client  nào khác được kết nối với database . Do đó, tài liệu về lệnh save khuyến nghị rằng lệnh này hầu như không bao giờ được chạy trong  môi trường production . Thay vào đó, nó gợi ý sử dụng lệnh bgsave . Điều này yêu cầu Redis phân tách database : cấp độ root  sẽ tiếp tục phục vụ các client  trong khi tiến trình con lưu database  trước khi thoát:
- bgsave
 Lưu ý  nếu khách hàng thêm hoặc sửa đổi dữ liệu trong khi hoạt động bgsave đang diễn ra, những thay đổi này sẽ không được ghi lại trong ảnh chụp nhanh.
Bạn cũng có thể chỉnh sửa file  cấu hình Redis để Redis tự động lưu ảnh chụp nhanh (được gọi là chế độ chụp nhanh hoặc RDB ) sau một khoảng thời gian nhất định nếu một số thay đổi tối thiểu được thực hiện đối với database . Đây được coi là một điểm lưu . Các cài đặt điểm lưu sau được bật theo mặc định trong file  redis.conf :
. . .
save 900 1
save 300 10
save 60 10000
. . .
dbfilename "nextfile.rdb"
. . .
Với các cài đặt này, Redis sẽ xuất một ảnh chụp nhanh của database  sang file  được xác định bởi tham số dbfilename cứ sau 900 giây nếu có ít nhất 1 khóa được thay đổi, cứ sau 300 giây nếu có ít nhất 10 khóa được thay đổi và cứ sau 60 giây nếu ít nhất 10000 các phím được thay đổi.
Bạn có thể sử dụng lệnh shutdown để  backup  dữ liệu Redis  của bạn  và sau đó đóng kết nối. Lệnh này sẽ chặn mọi client  được kết nối với database  và sau đó thực hiện thao tác save nếu ít nhất một điểm lưu được cấu hình,  nghĩa là  nó sẽ xuất database  ở trạng thái hiện tại sang file  .rdb trong khi ngăn client  thực hiện bất kỳ thay đổi nào.
Ngoài ra, lệnh shutdown sẽ xóa các thay đổi đối với file  chỉ phần phụ của Redis trước khi thoát nếu chế độ chỉ phần bổ sung được bật. Chế độ file  chỉ nối thêm (AOF) liên quan đến việc tạo log  của mọi hoạt động ghi trên  server  trong file  kết thúc bằng .aof sau mỗi ảnh chụp nhanh. Chế độ AOF và RDB có thể được bật trên cùng một  server  và sử dụng cả hai phương pháp liên tục là một cách hiệu quả để  backup   dữ liệu .
Nói tóm lại, lệnh shutdown về cơ bản là một lệnh save chặn cũng xóa tất cả các thay đổi gần đây đối với file  chỉ nối thêm và đóng kết nối với cá thể Redis:
Cảnh báo: Lệnh shutdown được coi là nguy hiểm . Bằng cách chặn các client  của  server  Redis, bạn có thể làm cho dữ liệu  của bạn  không khả dụng đối với  user  và ứng dụng phụ thuộc vào nó.  Ta  khuyên bạn chỉ nên chạy lệnh này nếu bạn đang kiểm tra hành vi của Redis hoặc bạn hoàn toàn chắc chắn rằng bạn muốn chặn tất cả các client  trên  server  Redis  của bạn .
Trên thực tế, bạn có thể quan tâm đến việc đổi tên lệnh này thành một thứ gì đó với khả năng bị vô tình chạy thấp hơn.
- shutdown
Nếu bạn chưa  cấu hình  bất kỳ điểm lưu nào nhưng vẫn muốn Redis thực hiện thao tác save , hãy thêm tùy chọn save vào lệnh tắt máy:
- shutdown save
Nếu bạn đã  cấu hình  ít nhất một điểm lưu nhưng bạn muốn tắt  server  Redis mà không thực hiện lưu, bạn có thể thêm đối số nosave vào lệnh:
- shutdown nosave
 Lưu ý  file  chỉ dành cho phần phụ thêm có thể dài ra theo thời gian, nhưng bạn có thể  cấu hình  Redis để viết lại file  dựa trên các biến nhất định bằng cách chỉnh sửa file  redis.conf . Bạn cũng có thể hướng dẫn Redis viết lại file  chỉ dành cho phần thêm bằng cách chạy lệnh bgrewriteaof :
- bgrewriteaof
bgrewriteaof sẽ tạo bộ lệnh ngắn nhất cần thiết để đưa database  trở lại trạng thái hiện tại. Như tên của lệnh này, nó sẽ chạy ở chế độ nền. Tuy nhiên, nếu một lệnh duy trì khác đang chạy trong một tiến  trình , lệnh đó phải kết thúc trước khi Redis thực thi bgrewriteaof .
Kết luận
Hướng dẫn này trình bày chi tiết một số lệnh được sử dụng để quản lý database và khóa. Nếu có các lệnh, đối số hoặc quy trình liên quan khác mà bạn muốn xem trong hướng dẫn này, vui lòng hỏi hoặc đưa ra đề xuất trong phần comment bên dưới.
Để biết thêm thông tin về các lệnh Redis, hãy xem loạt bài hướng dẫn của ta về Cách quản lý database Redis .
Các tin liên quan
Cách quản lý hàm băm trong Redis2019-09-20
Cách khắc phục sự cố trong Redis
2019-09-20
Cách quản lý danh sách trong Redis
2019-09-20
Cách quản lý chuỗi trong Redis
2019-09-20
Cách quản lý danh sách trong Redis
2019-09-20
Cách đánh giá hiệu suất của server Redis trên Ubuntu 18.04
2019-08-16
Cách cài đặt và bảo mật Redis trên Debian 10
2019-07-16
Cách cài đặt và bảo mật Redis trên Debian 9
2018-09-05
Cách bảo mật cài đặt Redis của bạn trên Ubuntu 18.04
2018-06-27
Cách cài đặt Redis từ nguồn trên Ubuntu 18.04
2018-06-27
 

