Bài blog hôm nay sẽ tìm hiểu qua khái niệm Redis, gói ghém lại các khái niệm cơ bản về Redis dành cho những người muốn tìm hiểu nhanh nó là gì? Sử dụng như thế nào
Redis a.k.a REmote DIctionary Server là 1 cơ sở dữ liệu mã nguồn mở kiểu NoSQL lưu trữ với dạng Key-Value, có thể được sử dụng như database, thường được sử dụng như bộ nhớ Cache hoạt động chung với các cơ sở dữ liệu khác
Điểm mạnh của nó là lữu trữ dữ liệu trên RAM nên tốc độ truy cập siêu nhanh. So với MySQL, MongoDB, …. dữ liệu được lưu trữ trên ổ cứng.
Do được lưu trữ trên RAM nên cũng có nhược điểm đó là dễ mất dữ liệu nếu Server shutdown
Bao gồm các kiểu dữ liệu cơ bản như: 1. STRINGS 2. LISTS 3. SETS 4. HASHES 5. SORTED SET (ZSET) ….
Đối với MacOS, sử dụng homebrew:
brew install redis
Đối với Linux, sử dụng các package manager mà bạn thích để cài, ở đây mình sử dụng snap
sudo snap install redis
Sau đó sử dụng lệnh redis-server
để khởi chạy Redis trên máy
Trước khi thực hiện các lệnh Redis trên Terminal thì ta chạy cli theo cú pháp redis-cli
Muốn thoát cli, ta chỉ cần quit
là xong
Thêm dữ liệu vào Redis
Như đã nói Redis lưu data dạng key-value nên muốn lưu dữ liệu ta chỉ cần sử dụng từ khoá SET(không phân biệt hoa thường) và cung cấp key và value theo từ khoá SET [KEY] [VALUE]
SET name SangTran
OK
Lúc này nó sẽ trả cho ta chữ OK có nghĩa là đã thêm, để check thì sử dụng từ khoá GET [KEY] để lấy nó ra
GET name
"SangTran"
Khi GET ta nhận được giá trị là "SangTran". Mặc định các giá trị trong Redis sẽ được lưu trữ kiểu string
Xoá dữ liệu
Tương tự dùng từ khoá DEL
để xoá, đồng thời sử dụng EXISTS
để check xem dữ liệu có tồn tại hay không
DEL name
(integer) 1
EXISTS name
(integer) 0
1 đại diện cho TRUE và 0 là FALSE
Liệt kê danh sách các keys
KEYS *
1) "name"
2) "age"
Muốn xoá hết dữ liệu ta dùng flushall
sau đó KEYS *
kiểm tra lại
flushall
OK
KEYS *
(empty array)
Xử lý hết hạn của dữ liệu
Chúng ta chỉ cần nhập ttl
(time to live) với key để xem được dữ liệu khi nào hết hạn
ttl name
(integer) -1
-1 ở đây có nghĩa là name sẽ không thể hết hạn,
Khi ta cho name thời hạn bằng EXPIRE
, với cú pháp EXPIRE [KEY] [second]
EXPIRE name 3
Lúc này ta đã cho name có thời hạn tồn tại lại là 3s. Trong lúc còn hạn nếu bạn dùng ttl
, nó sẽ trả về số giây mà name còn tồn tại, đến khi hết hạn thì sẽ trả giá trị là -2
ttl name
(integer) 3
ttl name
(integer) 2
ttl name
(integer) 1
ttl name
(integer) -2
Hãy cùng đến với kiểu dữ liệu cơ bản đầu tiên của Redis, LISTS cho phép lưu giá trị là danh sách các string dạng KEY [VALUE1, VALUE2, ....]
LPUSH
Để tạo 1 LISTS đầu tiên ta cần truyền KEY và VAlUE đầu tiên bằng LPUSH
, LPUSH sẽ thêm phần tử vào bên trái của LISTS
VD: hãy cùng thêm 1 vài tên cầu thủ vào players
LPUSH players Ronaldo
(integer) 1
LPUSH players Messi
(integer) 2
LPUSH players Mbappe
(integer) 3
LRANGE
Đối với LISTS chúng ta không thể dùng GET thông thường để lấy ra, thay vào đó sử dụng vòng lặp để hiện thị các giá trị, LRANGE [KEY] [START] [END], muốn duyệt từ đầu đến cuối nên ta duyệt từ 0 đến -1
LRANGE players 0 -1
1) "Mbappe"
2) "Messi"
3) "Ronaldo"
Ngoài ra còn 1 số từ khoá khác tương tự bạn có thể tìm hiểu
RPUSH
Thêm vào phần tử ở cuối và trả về độ dài phần tử
RPUSH players Lukaku
(integer) 4
LPOP/RPOP
Xoá vị trí đầu tiên(LPOP)/cuối(LPOP) trả về và trả về giá trị đã xoá
LPOP players
"Mbappe"
RPOP players
"Lukaku"
Tương tự như LISTS chỉ khác ở đây SETS chỉ gồm các giá trị không trùng lặp
SADD
Đầu tiên để cần thêm giá trị vào SETS ta dùng SADD
SADD languages JAVA
(integer) 1
SADD languages PYTHON
(integer) 1
Nếu chúng ta thêm giá trị trùng lặp, Redis sẽ trả về 0 có nghĩa là không thêm được
SADD languages JAVA
(integer) 0
SMEMBERS
Khi chúng ta cần duyệt xem các giá trị trong SETS chỉ cần dùng SMEMBERS
và cung cấp KEY là được
SMEMBERS languages
1) "JAVA"
2) "PYTHON"
SREM
Remove phần tử trong SETS rất đơn giản chỉ cần sử dụng SREM
SREM languages JAVA
(integer) 1
SMEMBERS languages
1) "PYTHON"
Hashes trong Redis là Key Value lồng nhau, sử dụng để quản lí Key Value dùng để lưu trữ object
HSET/HGET
Muốn set giá trị hoặc get giá trị trong HASHES, đơn giản như đang giỡn
HSET person name SangTran
(integer) 1
HGET person name
"SangTran"
HSET person age 20
(integer) 1
HGET person age
"20"
HGETALL
HGETALL
giúp bạn trả về toàn bộ Key Value của HASHES
HGETALL person
1) "name"
2) "SangTran"
3) "age"
4) "20"
HDEL
Xoá phần tử không thể đơn giản hơn với HDEL
HDEL person age
(integer) 1
HEXISTS
Check xem phần tử có tồn tại hay không bằng HEXISTS
, hãy cùng check xem phần tử age
mình vừa xoá
HEXISTS person age
(integer) 0
Kết quả trả về 0 có nghĩa là phần tử không tồn tại
Như vậy là mình đã tìm hiểu qua được các kiểu dữ liệu và các lệnh cơ bản, ngoài ra còn rất nhiều lệnh khác và các kiểu dữ liệu khác bạn có thể tìm hiểu ở đây. Lần sau mình sẽ sử dụng Redis để Cache server NodeJS đơn giản, mọi người nhớ đón xem ❤️
Hi vọng bài chia sẻ này hữu ích với mọi người!
Cheers 🍺
Nguồn tham khảo: