Redis - Các kiểu dữ liệu phổ biến và kịch bản ứng dụng vào cuộc sống phần mềm

Nội dung bài viết

Video học lập trình mỗi ngày

Redis - bí kíp tồn tại trong mỗi trường level cao

Chúng ta đều biết rằng Redis cung cấp vô số kiểu dữ liệu, có 5 kiểu phổ biến là String (chuỗi), Hash (băm), List (danh sách), Set (tập hợp), Zset (tập hợp có thứ tự) .

Với việc cập nhật phiên bản Redis mỗi ngày tinh vi hơn, thì có 4 kiểu dữ liệu được hỗ trợ thêm đó là: BitMap (version 2.2), HyperLogLog (version 2.8), GEO (version 3.2), Stream (version 5.0) .

Hẳn là có nhiều bạn đã đọc qua và tôi cho là đã hiểu về các kiểu dữ liệu đó, nhưng các bạn đã áp dụng những kiểu đó vào kịch bản nào trong phần mềm của các bạn? Liệu các bạn có làm sai không? Tôi chưa dám kết luận, nhưng hãy để tôi nói về cuộc sống của tôi trước tiên.

Ngoài ra trong quá trình phỏng vấn, các câu hỏi như thế này thường được đặt ra ví dụ: Zset trong Redis, vậy khi nào bạn nên sử dụng chúng?

Bạn sẽ trả lời sao.. Nếu còn do dự hãy đọc hết 5 phần trong Series về redis. Bạn sẽ không tốn thời gian nếu truy cập vào Playlist học redis của tôi.

Các lệnh phổ biến: String redis

Các thao tác cơ bản trên String thông thường như sau:

# Đặt giá trị cho biến
> SET name anonsytick
OK
# Lấy giá trị
> GET name
"anonsytick"
# Kiểm tra key đã tồn tại hay không?
> EXISTS name
(integer) 1
# độ dài của key
> STRLEN name
(integer) 10
# Xóa key
> DEL name
(integer) 1

Ngoài ra chúng ta muốn set nhiều values:

# Đặt nhiều key và nhiều value tương ứng
> MSET key1 value1 key2 value2 
OK
# Lấy values theo nhiều keys.
> MGET key1 key2 
1) "value1"
2) "value2"

Nếu chúng ta set giá trị là số nguyên thì có thể sử dụng làm bộ đếm như dưới đây:

# Set key là một số nguyên
> SET number 0
OK
# Tăng key lên 1
> INCR number
(integer) 1
# Hoặc tăng key lên 10
> INCRBY number 10
(integer) 11
# Giảm theo key 1
> DECR number 1
(integer) 10
# Giảm 10 với keys
> DECRBY number 10
(integer) 0

Chú ý nhớ set cho key hết hạn không nữa chúng ta sẽ chứa nhiều rác trong Memory (mặc định là không bao giờ hết hạn):

# Đặt keys hết hạn trong 60 giây
> EXPIRE name  60 
(integer) 1
# kiểm tra xem còn bao nhiêu thời gian của key
> TTL name 
(integer) 51

# Có thể set hết hạn theo cách này, thêm ex sau cùng
> SET key value EX 60
OK
> SETEX key 60 value
OK

Chèn nếu nó không tồn tại: Được hiểu là atom redis

#(not exists)
>SETNX key value
(integer) 1

Các tình huống ứng dụng khi dùng String Redis

Tình huống save vào cache:

Có hai cách lưu Object vào cache sử dụng String.

  • SET user:1 '{"name":"anonystick", "age":38}' Nếu các bạn sử dụng nodejs thì chuyển JSON trước khi set.
  • MSET user:1:name xiaolin user:1:age 18 user:2:name xiaomei user:2:age 20 cách này có vẻ hay hơn khi chúng ta set lần lượt.

Tình huống thống kê bộ đếm

Bởi vì Redis xử lý các lệnh đơn luồng, quá trình thực thi các lệnh là nguyên tử (Xem lại Atom database ). Do đó, kiểu dữ liệu String phù hợp cho các tình huống đếm, chẳng hạn như đếm lượt truy cập, lượt thích...

Ví dụ, để tính số lần đọc một bài báo:

# Khởi tạo id và số lượng đọc của một bài viết.
> SET aritcle:readcount:1001 0
OK
# Mỗi lượt đọc thì lại tăng lên 1
> INCR aritcle:readcount:1001
(integer) 1
# Tăng thêm nếu có thêm lượt đọc +1
> INCR aritcle:readcount:1001
(integer) 2
# Tăng thêm nếu có thêm lượt đọc +1
> INCR aritcle:readcount:1001
(integer) 3
# Hiển thị số lượt đã đọc cho người dùng
> GET aritcle:readcount:1001
"3"

Như vậy đã xong về cách sử dụng kiểu dữ liệu String và các tình huống ứng dụng trong thực tế. Nếu các bạn cảm thấy nó dễ, có thể là do tôi trình bày quá tốt mà thôi. Tiếp theo chúng ta đi vào kiểu thứ hai đó chính là List trong redis.

Có thể bạn đã bị missing