Tạo list (danh sách)
Một key 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à chúng ta có thể thêm các phần tử 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
. Chúng ta 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ẽ trả về 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 là Nguyễn Văn A
:
> rpush key_philosophy1 "Tôi" > rpush key_philosophy1 "là" > rpush key_philosophy1 "Nguyên" > rpush key_philosophy1 "Văn" > rpush key_philosophy1 "A"
Đầu ra từ lệnh cuối cùng sẽ đọc:
Output
(integer) 5
Lưu ý chúng ta có thể thêm nhiều phần tử trong một lệnh lpush
hoặc rpush
:
> rpush key_philosophy1 "-" "B" "C"
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 danh sách chưa tồn tại 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 ta chạy lệnh lset
theo sau là tên key, index của phần tử chúng ta muốn thay đổi và giá trị mới:
> lset key_philosophy1 5 "D"
Nếu chúng ta thử thêm một phần tử vào một key hiện có không phải là danh sách, nó sẽ dẫn đến xung đột về kiểu dữ liệu và trả về lỗi. Ví dụ thêm phần tử vào key không phải là danh sách 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 key 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, chúng ta cần xóa key và bắt đầu lại bằng lệnh lpush
hoặc rpush
.
Lấy các phần tử từ một list (danh sách)
Để lấy một loạt các phần tử trong một danh sách, sử dụng lrange
lệnh tiếp theo là khoảng muốn lấy. Vị trí 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 Output
1) "Tôi" 2) "là" 3) "Nguyễn" 4) "Văn" 5) "A" 6) "D" 7) "C"
Vị trí cũng có thể là số âm, -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 Output
1) "A" 2) "D" 3) "C"
Để lấy một phần tử duy nhất từ danh sách, chúng ta có thể sử dụng lệnh lindex
. Tuy nhiên, lệnh này yêu cầu chúng ta 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
"A"
Để 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 list length
:
> llen key_philosophy1 Output
(integer) 5
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 truyền trong 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 key nguồn và key đí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.
Nguồn: