+1

[Redis] Bài 1 Các kiểu dữ liệu trong Redis

Redis là gì ?

Redis là một in-memory remote database cung cấp hiệu xuất cao, mã nguồn mở. Redis được viết tắt từ Remote Dictionary Server, là một kiểu non-relational databbase tốc độ cao dùng để chứa dữ liệu dạng key-values của các kiểu dữ liệu khác nhau. Ngoài ra Redis còn hỗ trợ các tính năng khác như in-memory persistent storage on disk , replication để tăng hiệu xuất đọc dữ liệu và client-side sharding để tăng hiệu xuất ghi.

Bảng 1 So sánh các tính năng của các loại Database khác nhau image.png

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

Redis có năm kiểu dữ liệu khác nhau string, hash, list, set, sorted set. Các kiểu dữ liệu này có các shared command (câu lệnh dùng chung), cũng như các câu lệnh riêng biệt chỉ có thể dùng cho một hoặc hai loại dữ liệu riêng biệt

Bảng 2 So sánh các loại dữ liệu trong Redis image.png

STRINGs

Là kiểu dữ liệu đơn giản nhất và giống với các các kiểu key-value stores khác.

image.png Như hình trên ta tạo ra một STRING có key là hello và giá trị là world

Command Function
SET Set giá trị với cho key truyền vào
GET Lấy giá trị với key tương ứng
DEL Xóa dữ liệu với key tương ứng
$ redis-cli
redis 127.0.0.1:6379> set hello world
OK
redis 127.0.0.1:6379> set hello
"world"
redis 127.0.0.1:6379> delete hello
(integer) 1
redis 127.0.0.1:6379> get hello
(nil)

Ngoài các lệnh cơ bản còn có một số lệnh để đọc và viết một phần dữ liệu và một số lệnh cho phép xem STRING như một number để increment/descrement chúng. Chúng ta sẽ nói tới các commands này vào các bài sau.

LISTs

Là kiểu dữ liệu sử dụng linked-list structure (tham khảo). Redis chứa linked-listed strings giống với kiểu dữ liệu STRINGs cơ bản

image.png

Command Function
LPUSH/RPUSH Push dữ liệu vào đầu và cuối của list
LRANGE Fetches một khoảng dữ liẹu trên list
LINDEX Fetches một element trong list dự trên index position truyền vào
LPOP/RPOP Pop dữ liệu ở đầu và cuối của list
redis 127.0.0.1:6379> rpush list-key item
(integer) 1
redis 127.0.0.1:6379> rpush list-keyitem2
(integer) 2
redis 127.0.0.1:6379> rpush list-key item
(integer) 3
redis 127.0.0.1:6379> lrange list-key0 -1
1) "item"
2) "item2"
3) "item"
redis 127.0.0.1:6379> lindex list-key1
"item2"
redis 127.0.0.1:6379> lpop list-key
"item"
redis 127.0.0.1:6379> lrange list-key0 -1
1) "item2"
2) "item"
redis 127.0.0.1:6379>

Chúng ta cũng có thể remove, thêm dữ liệu ở giữa Lists, hoặc cắt Lists với kích thước cụ thể . Ngoài các lệnh cơ bản chúng ta sẽ nói tới các commands nâng cao ở các bài sau.

SETs

SETs giống với LISTs ở chỗ cách chứa dữ liệu, nhưng khác ở chỗ SETs dùng hash table để giữ cho tất cả các strings trong SETs là unique.

image.png

Command Function
SADD Thêm item vào set
SMEMBERS Trả về tất cả items trong set
SISMEMBER Kiểm tra item có trong set hay không
SREM Xóa item ra khỏi set, nếu tồn tại
redis 127.0.0.1:6379> sadd set-key item
(integer) 1
redis 127.0.0.1:6379> sadd set-key item2
(integer) 1
redis 127.0.0.1:6379> sadd set-key item
(integer) 0
redis 127.0.0.1:6379> smembers set-key
1) "item"
2) "item2"
redis 127.0.0.1:6379> sismember set-key item4
(integer) 0
redis 127.0.0.1:6379> sismember set-key item
(integer) 1
redis 127.0.0.1:6379> srem set-key item2
(integer) 1
redis 127.0.0.1:6379> srem set-key item2
(integer) 0

SETs thường dùng với intersection, union, difference (SINTER, SUNION, SDIFF) chúng ta sẽ nói tới các commands nâng cao ở các bài sau.

HASHs

Khác với List và Set, Hash chứa một list sub-key và value. Value là các kiểu giá trị như STRINGs

image.png

Command Function
HSET Chứa value vào hash key tương ứng với sub-key
HGET Fetches giá trị tương úng với hash-key và sub-key tương ứng
HGETALL Fetches cả hash bằng hash-key
HDEL Xóa value trong hash tương ứng với hash-key và sub-key tương ứng
redis 127.0.0.1:6379> hset hash-key sub-key1 value1
(integer) 1
redis 127.0.0.1:6379> hset hash-key sub-key2 value2
(integer) 1
redis 127.0.0.1:6379> hset hash-key sub-key1 value1
(integer) 0
redis 127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value1"
3) "sub-key2"
4) "value2"
redis 127.0.0.1:6379> hdel hash-key sub-key2
(integer) 1
redis 127.0.0.1:6379> hdel hash-key sub-key2
(integer) 0
redis 127.0.0.1:6379> hget hash-key sub-key1
"value1"
redis 127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value1"

Có thể thay đổi một hay nhiều value cùng một lúc.

Sorted sets in Redis

ZSETs giống với HASHs lưu dạng key-value. Keys (gọi là members) là unique, và value là floating-point number (gọi là scores). ZSETs có thể truy cập bởi các members (như HASHs), nhưng các items cũng có thể truy cập thông qua sorted order (order theo scores) và giá trị scores.

image.png

Command Function
ZADD Thêm member vào ZSET
ZRANGE Featches dữ liệu từ ZSET từ qua khoảng index positions thông qua sorted order
ZRANGEBYSCORE Featches dữ liệu dựa trên khoảng scores
redis 127.0.0.1:6379> zadd zset-key 728 member1
(integer) 1
redis 127.0.0.1:6379> zadd zset-key 982 member0
(integer) 1
redis 127.0.0.1:6379> zadd zset-key 982 member0
(integer) 0
redis 127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member1"
2) "728"
3) "member0"
4) "982"
redis 127.0.0.1:6379> zrange byscore zset-key0 800 withscores
1) "member1"
2) "728"
redis 127.0.0.1:6379> zrem zset-key member1
(integer) 1
redis 127.0.0.1:6379> zrem zset-keymember1
(integer) 0
redis 127.0.0.1:6379>zrange zset-key0 -1 withscores
1) "member0"
2) "982"

Nguồn tham khảo

[Book] Redis in Action


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí