Posts Redis 101 (Part I)
Post
Cancel

Redis 101 (Part I)

Tổng quan

Trong thời gian học môn Lưu trữ và xử lý dữ liệu lớn ở trường, mình có được nghe qua về redis. Đây là một cơ sở dữ liệu dạng NoSQL. Khác với các cơ sở dữ liệu khác thì đây là một dạng lưu trữ in-memory với cách lưu trữ là key-value. Ngoài tác dụng lưu trữ dữ liệu redis còn dùng để cache, message broker và queue. Redis cũng hỗ trợ nhiều cấu trúc dữ liệu cơ bản như strings, hash, list,set,…Việc lưu trữ trên RAM sẽ bị mất khi gặp sự cố nên redis đã có hỗ trợ cho việc backup trên đĩa cứng để có thể phục hồi khi gặp sự cố. Với khả năng như vậy redis sẽ có ứng dụng trong các bài toán về real-time analytic hay iot.

Cài đặt redis

Việc cài đặt redis rất đơn giản có thể tham khảo tại https://redis.io/download Sau khi cài đặt mở terminal chạy redis-cli sẽ chạy vào host mặc định là localhost và cổng mặc định là 6379

Các kiểu dữ liệu trong redis

1. Strings

Strings là kiểu dữ liệu cơ bản nhất của redis được lưu dưới dạng nhị phân. Ta có hai thao tác là SET và GET. Chú ý rằng SET sẽ thay thế bất kỳ giá trị nào hiện có được lưu trong key kể cả giá trị của key đó không phải string

1
2
3
4
127.0.0.1:6379> set myname viethoang
OK
127.0.0.1:6379> get myname
"viethoang"

2. List

Kiểu dữ liệu List đơn giản là danh sách các string được sắp xếp theo thứ tự truyền vào. Ta có thể thêm vào đầu trái hoặc đầu phải với thao tác là LPUSH hoặc RPUSH. key sẽ được xóa nếu các list rỗng sau các thao tác LPOP hoặc RPOP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
127.0.0.1:6379> KEYS *
1) "myname"
2) "users"
127.0.0.1:6379> lpush users viethoang2
(integer) 2
127.0.0.1:6379> rpush users viethoang3
(integer) 3
127.0.0.1:6379> lrange users 0 10
1) "viethoang2"
2) "viethoang1"
3) "viethoang3"
127.0.0.1:6379> lpop users
"viethoang2"
127.0.0.1:6379> rpop users
"viethoang3"
127.0.0.1:6379> lpop users
"viethoang1"

3. Set

Set là tập hợp string không được sắp xếp. Các thao tác thêm phần tử, đọc, xóa từng phần tử, kiểm tra sự xuất hiện của phần tử là 0(1). Ngoài ra còn hỗ trợ các phép toán intersection/union/difference

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
127.0.0.1:6379> sadd comics one-piece
(integer) 1
127.0.0.1:6379> sadd comics conan
(integer) 1
127.0.0.1:6379> sadd comics naruto
(integer) 1
127.0.0.1:6379> smembers comics
1) "naruto"
2) "one-piece"
3) "conan"
127.0.0.1:6379> spop comics
"naruto"
127.0.0.1:6379> smembers comics
1) "one-piece"
2) "conan"

4. Hashes

Hash là kiểu lưu trữ hash table của các cặp key-value. Ví dụ hash thường được dùng lưu các user(các trường name, age, address,…). Hash cũng hỗ trợ các thao tác thêm đọc xóa, đọc tất cả giá trị bên trong

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
127.0.0.1:6379> hmset character-1 name viethoang school hust age 21
OK
127.0.0.1:6379> hgetall character-1
1) "name"
2) "viethoang"
3) "school"
4) "hust"
5) "age"
6) "21"
127.0.0.1:6379> hget character-1 age
"21"
127.0.0.1:6379> hget character-1 school
"hust"
127.0.0.1:6379> hget character-1 name
"viethoang"

5. Sorted set(zset)

Sorted set là tập hợp các string không trùng nhau và đuọc sắp xếp theo một trọng số

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> zadd myzset 10 element_1
(integer) 1
127.0.0.1:6379> zadd myzset 2 element_2
(integer) 1
127.0.0.1:6379> zadd myzset 6 element_3
(integer) 1
127.0.0.1:6379> zrangebyscore myzset 0 100
1) "element_2"
2) "element_3"
3) "element_1"

Lợi ích của việc sử dụng redis

Khả năng truy vấn

Vì là lưu trữ ở ram nên hiệu suất với hoạt động đọc ghi của redis trung bình ít hơn 1/1000 giây và có thể hỗ trợ hàng triệu thao tác mỗi giây khác với các hệ thống lưu trữ khác phải yêu cầu round-trip vào disk

Tính đảm bảo về dữ liệu

Redis sử dụng kiến trúc primary-replica nên dữ liệu có thể sao chép sang nhiều máy chủ khác nhau. Để đảm bảo dữ liệu không mấy mát redis có thể hỗ trợ sao lưu vào đĩa (point-in-time backups)

Một số ứng dụng của redis

Caching

Session store

Real time analytic

Redis có thể đóng vai trò như queue tương tự với apache kafka. Việc này sẽ giúp tách biệt giữa hai phần dữ liệu vào và ra mà không bị mất mát.
https://redislabs.com/wp-content/uploads/2021/01/ajeet-use-cases-blog-3.png

This post is licensed under CC BY 4.0 by the author.