Tìm hiểu Redis databace model

Chào các bạn mình hôm này mình xin chia sẻ một mảng khá thú vị về redis database đó là redis model..hihi Như lần trước mình có chia sẻ 2 bài cũng về chủ đề redis từ tổng quan đến cơ chê ghi dữ liệu vào file của redis đó là 2 cơ chế: RDP vs AOF các bạn có thể tham khảo linh này nhé https://viblo.asia/p/redis-database-va-co-che-ghi-file-len-disk-924lJrpmlPM. Rồi đến việc cài đặt redis, mình thì đang dùng ubuntu nên mình chia sẻ cách cài đặt trên ubuntu và các dùng thư viện để kết nối redis thì các bạn tham khảo link sau: https://viblo.asia/p/redis-database-cai-dat-va-ket-noi-trong-java-63vKjnWVK2R.

Như các bạn thấy với c hê quản trị cơ sở dữ liệu Mysql hay SQL Server thì việc lưu dữ liệu luôn theo một cấu trúc gọi là table, trong table có các column chưa các kiểu dữ liệu khác nhau. Còn với redis cấu trúc lưu trữ đinh nghĩa gọn gàng trong 5 kiểu: String, Hash, List, Set, Sorted Set

1.String

với kiểu String tren redis thì lưa trữ dữ liệu tối đa 512 megabyte cho một key đảm nhiệm

127.0.0.1:6379> set strkey "chung toi la chien sy"
OK
127.0.0.1:6379> get strkey
"chung toi la chien sy"
127.0.0.1:6379> 

2.Hash

Kiểu lưu trữ hash thì dùng cặp key-value, theo minh tìm hiểu được biết key trong hash được lưu trữ sắp xếp ngẫu nhiên trong bộ nhớ, mình đang hiểu như vậy, có một chút liên hệ sang java thì họ nhà hash khi lưu trữ ko được order mình nghĩ chắc cũng same same 😄
Kiểu Hash theo có nhân mình thì thấy rất tiện ích, mình thích dùng kiểu hash hơn là set, tất nhiên cũng tùy vào bào toán cụ thể để chọn lựa cách lưu trữ phù hợp, đối với hash hỗ trợ các thao tác thêm, đọc, xóa từng phần tử, cũng như đọc tất cả giá trị chặng hạn như có thể ghét tất các key hoặc tất giá trị

vd:

127.0.0.1:6379> HSET key1 user "name: duy, age: 25"
(integer) 1
127.0.0.1:6379> HGET key1 user
"name: duy, age: 25"
127.0.0.1:6379> HSET key1 user2 "name: duy, age: 25"
(integer) 1
127.0.0.1:6379> HKEYS key1
1) "user"
2) "user2"

3.List

Danh sách liên kết trong redis hỗ trợ các thao tác push, pop từ cả 2 phía rất tiện ích phải, đối với bài toán mà phải insert hay lấy item ra vào db với tần suất lớn thì sử dụng List là ok đó. List có thể đọc 1 hoặc nhiều items của list, tìm kiếm và xóa giá trị. vd:

127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6 7
(integer) 7
127.0.0.1:6379> LRANGE list1 0 10
1) "7"
2) "6"
3) "5"
4) "4"
5) "3"
6) "2"
7) "1"

4.Set

Giá trị được lưu trong Set là tập các string không được sắp xếp. Set hỗ trợ 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ử trong tập hợp. Ngoài ra Redis còn hỗ trợ các phép toán tập hợp, gồm intersect/union/difference, được mình hiểu ngắn gọn là lưu trữ các phần tử khác nhau không trùng nhau.

vd:

127.0.0.1:6379> SADD keyset1 12 12 342 54
(integer) 3
127.0.0.1:6379> SMEMBERS keyset1
1) "12"
2) "54"
3) "342"

5.Sorted Set

Sorted Set là 1 danh sách lưu trữ, trong đó mỗi phần tử là map của 1 string tương đương với một phần tử và 1 floating-point number được gọi là score, sorted set khi lưu trữ vào bộ nhớ dữ liệu được sắp xếp theo score. Sorted set có các thao tác nhau: thêm, đọc, xóa từng phần tử, có lấy ra các phần tử dựa theo score hoặc có thể chỉ lấy giá trị string của tất các phần tử hoặc lấy phần tử đi kèm với score cửa chúng. vd:

127.0.0.1:6379> ZADD keysorted 23 valua1
(integer) 1
127.0.0.1:6379> ZADD keysorted 3 valua2
(integer) 1
127.0.0.1:6379> ZADD keysorted 423 valua3
(integer) 1

127.0.0.1:6379> ZRANGE keysorted 0 -1
1) "valua2"
2) "valua1"
3) "valua3"
4) 
5) 127.0.0.1:6379> ZRANGE keysorted 0 -1 withscores 
6) "valua2"
7) "3"
8) "valua1"
9) "23"
10) "valua3"
11) "423"

6.Lời nhắn

Với mỗi model trong redis đều suport rất nhiều command truy vấn, mình thì không đề cập được hết các câu lệnh truy vấn trong bài này vì mình thấy trên trang chủ redis đã mô tả rất rõ từng command và cách sử dụng đi kèm. Các bạn tham khảo vào link này nhé: https://redis.io/commands/command