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
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
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.
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
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.
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
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.
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