[Redis] – Redis list

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

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 lpushxrpushx 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:

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ