Cách quản lý danh sách trong Redis
Redis là một repodata key-value open-souce trong bộ nhớ. Trong Redis, danh sách là một tập hợp các chuỗi được sắp xếp theo thứ tự chèn, tương tự như danh sách được liên kết . Hướng dẫn này sẽ tạo và làm việc với các phần tử trong danh sách Redis.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.
Tạo danh sách
Một khóa chỉ có thể chứa một danh sách, mặc dù bất kỳ danh sách nào cũng có thể chứa trên bốn tỷ phần tử. Redis đọc danh sách từ trái sang phải và bạn có thể thêm các phần tử danh sách mới vào phần đầu của danh sách (phần cuối "bên trái") bằng lệnh lpush
hoặc phần đuôi (phần cuối "bên phải") bằng rpush
. Bạn cũng có thể sử dụng lpush
hoặc rpush
để tạo danh sách mới:
- lpush key value
Cả hai lệnh sẽ xuất ra một số nguyên cho biết có bao nhiêu phần tử trong danh sách. Để minh họa, hãy chạy các lệnh sau để tạo một danh sách có chứa câu chính tả “Tôi nghĩ là do chính tôi”:
- lpush key_philosophy1 "therefore"
- lpush key_philosophy1 "think"
- rpush key_philosophy1 "I"
- lpush key_philosophy1 "I"
- rpush key_philosophy1 "am"
Đầu ra từ lệnh cuối cùng sẽ đọc:
Output(integer) 5
Lưu ý bạn có thể thêm nhiều yếu tố danh sách với một đơn lpush
hoặc rpush
tuyên bố:
- rpush key_philosophy1 "-" "Rene" "Decartes"
Lệnh lpushx
và rpushx
cũng được sử dụng để thêm phần tử vào danh sách, nhưng sẽ chỉ hoạt động nếu danh sách đã cho đã tồn tại. Nếu một trong hai lệnh không thành công, nó sẽ trả về (integer) 0
:
- rpushx key_philosophy2 "Happiness" "is" "the" "highest" "good" "–" "Aristotle"
Output(integer) 0
Để thay đổi phần tử hiện có trong danh sách, hãy chạy lệnh lset
theo sau là tên khóa, index của phần tử bạn muốn thay đổi và giá trị mới:
- lset key_philosophy1 5 "sayeth"
Nếu bạn thử thêm một phần tử danh sách vào một khóa hiện có không chứa danh sách, nó sẽ dẫn đến xung đột về kiểu dữ liệu và trả về lỗi. Ví dụ: lệnh set
sau đây tạo một khóa giữ một chuỗi, vì vậy, nỗ lực sau để thêm phần tử danh sách vào nó bằng lpush
sẽ không thành công:
- set key_philosophy3 "What is love?"
- lpush key_philosophy3 "Baby don't hurt me"
Output(error) WRONGTYPE Operation against a key holding the wrong kind of value
Không thể chuyển đổi các khóa Redis từ kiểu dữ liệu này sang kiểu dữ liệu khác, vì vậy, để biến key_philosophy3
thành một danh sách, bạn cần xóa khóa và bắt đầu lại bằng lệnh lpush
hoặc rpush
.
Lấy các phần tử từ một danh sách
Để lấy một loạt các mục trong một danh sách, sử dụng lrange
lệnh tiếp theo là một sự khởi đầu bù đắp và dừng lại một bù đắp. Mỗi phần bù là một chỉ số dựa trên 0
, nghĩa là 0
đại diện cho phần tử đầu tiên trong danh sách, 1
đại diện cho phần tiếp theo, v.v.
Lệnh sau sẽ trả về tất cả các phần tử từ danh sách ví dụ đã tạo trong phần trước:
- lrange key_philosophy1 0 7
Output1) "I" 2) "think" 3) "therefore" 4) "I" 5) "am" 6) "sayeth" 7) "Rene" 8) "Decartes"
Các hiệu số được chuyển cho lrange
cũng có thể là số âm. Khi được sử dụng trong trường hợp này, -1
đại diện cho phần tử cuối cùng trong danh sách, -2
đại diện cho phần tử đứng thứ hai đến cuối cùng trong danh sách, v.v. Ví dụ sau trả về ba phần tử cuối cùng của danh sách được giữ trong key_philosophy1
:
- lrange key_philosophy1 -3 -1
Output1) "I" 2) "am" 3) "sayeth"
Để lấy một phần tử duy nhất từ danh sách, bạn có thể sử dụng lệnh lindex
. Tuy nhiên, lệnh này yêu cầu bạn cung cấp index của phần tử làm đối số. Như với lrange
, index dựa trên 0, nghĩa là phần tử đầu tiên ở index 0
, phần tử thứ hai ở index 1
, v.v.
- lindex key_philosophy1 4
Output"am"
Để biết có bao nhiêu phần tử trong một danh sách nhất định, hãy sử dụng lệnh llen
, viết tắt của “ l ist len gth”:
- llen key_philosophy1
Output(integer) 8
Nếu giá trị được lưu trữ tại khóa đã cho không tồn tại, llen
sẽ trả về lỗi.
Xóa các phần tử khỏi danh sách
Lệnh lrem
loại bỏ lần xuất hiện đầu tiên trong số các lần xuất hiện đã xác định trùng với một giá trị nhất định. Để thử nghiệm điều này, hãy tạo danh sách sau:
- rpush key_Bond "Never" "Say" "Never" "Again" "You" "Only" "Live" "Twice" "Live" "and" "Let" "Die" "Tomorrow" "Never" "Dies"
Ví dụ lrem
sau sẽ xóa lần xuất hiện đầu tiên của giá trị "Live"
:
- lrem key_Bond 1 "Live"
Lệnh này sẽ xuất ra số phần tử bị xóa khỏi danh sách:
Output(integer) 1
Số được chuyển đến lệnh lrem
cũng có thể là số âm. Ví dụ sau sẽ xóa hai lần xuất hiện cuối cùng của giá trị "Never"
:
- lrem key_Bond -2 "Never"
Output(integer) 2
Lệnh lpop
xóa và trả về phần tử đầu tiên hoặc phần tử “ngoài cùng bên trái” khỏi danh sách:
- lpop key_Bond
Output"Never"
Tương tự như vậy, để xóa và trả lại phần tử cuối cùng hoặc phần tử “ngoài cùng bên phải” từ danh sách, hãy sử dụng rpop
:
- rpop key_Bond
Output"Dies"
Redis cũng bao gồm lệnh rpoplpush
, lệnh này xóa phần tử cuối cùng khỏi danh sách và đẩy nó lên đầu danh sách khác:
- rpoplpush key_Bond key_AfterToday
Output"Tomorrow"
Nếu khóa nguồn và khóa đích được truyền cho lệnh rpoplpush
giống nhau, về cơ bản nó sẽ xoay các phần tử trong danh sách.
Kết luận
Hướng dẫn này trình bày chi tiết một số lệnh mà bạn có thể sử dụng để tạo và quản lý danh sách trong Redis. 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 được nêu 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ý database và khóa Redis2019-09-20
Cách quản lý hàm băm trong Redis
2019-09-20
Cách khắc phục sự cố 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 cài đặt Redis từ nguồn trên Ubuntu 18.04
2018-06-27
Cách bảo mật cài đặt Redis của bạn trên Ubuntu 18.04
2018-06-27