Redis
Bài đăng này đã không được cập nhật trong 7 năm

1. Giới thiệu redis:
- Redis là một bộ mã nguồn mở, được sử dụng như một database.
- Redis hỗ trợ các kiểu dữ liệu String, List, Set, Ordered Set và Hash.
- Tham khảo cách download và cài đặt redis tại đây.
2. Redis basic:
- Dữ liệu bên trong redis được tổ chức và quản lý theo kiểu
key-value. - Kiểu tố chức dữ liệu này cho phép redis tạo, lưu trữ và quản lý
valuethông quakeytương ứng. - Sau khi đã install redis, chạy command redis-server để start server của redis.
- Sử dụng
redis-cliđể thao tác với dữ liệu được lưu bên trong redis.
a. Command GET, SET, DEL:
- Ta sử dụng command
SETđể tạovaluechokey. - Ta sử dụng command
GETđể lấyvalueứng vớikey. - Trong trường hợp
keychưa tồn tại thì redis trả vềnil.
hcm-102-0003@hcm1020003:~$ redis-cli
127.0.0.1:6379> SET key "value"
OK
127.0.0.1:6379> GET key
"value"
127.0.0.1:6379> GET not-exists-key
(nil)
- Ta sử dụng command
DELđể xóa 1 cặpkey-value.
127.0.0.1:6379> DEL key
(integer) 1
127.0.0.1:6379> GET key
(nil)
127.0.0.1:6379>
b. Command EXPIRE, TLL:
- Ta sử dụng command
EXPIREđể set thời gian tồn tại bên trong redis của 1 cặpkey-value - Sau thời gian này thì cặp
key-valuesẽ bị xóa khỏi redis.
127.0.0.1:6379> SET expire-key "value"
OK
127.0.0.1:6379> EXPIRE expire-key 100
(integer) 1
127.0.0.1:6379> SET not-expire-key "value"
OK
- Ta sử dụng command
TLLđể lấy thời gian tồn tại còn lại của căpkey-valuebên trong redis. TLLtrả về -1 khi cặp key-value không bao giờ bị xóa trong redis.TLLtrả về -2 khi cặp key-value đã bị xóa khỏi redis.
127.0.0.1:6379> TTL expire-key
(integer) 90
127.0.0.1:6379> TTL expire-key
(integer) 89
127.0.0.1:6379> TTL expire-key
(integer) -2
127.0.0.1:6379> TTL not-expire-key
(integer) -1
3. Redis và các kiểu dữ liệu khác:
Redis hỗ trợ lưu trữ nhiều kiểu dữ liệu khác nhau ngoài String.
a. List:
Đối với kiểu sữ liệu List, redis hỗ trợ các command LPUSH, RPUSH, LPOP, RPOP, LLEN, LRANGE.
- Ta sử dụng command
RPUSHđể thêm 1 phần tử vào cuốiListvàLPUSHđể thêm 1 phần tử vào đầuList. - Khi key chưa tồn tại thì 1
Listrỗng tương ứng với key sẽ được tạo trước khi thêm phần tử vàoList. - Khi key đã tồn tại nhưng value tương ứng với key không phải là
ListthìRPUSH,LPUSHtrả về lỗi. RPUSH,LPUSHtrả về số lượng phần tử có trongListsau khi phần tử đã được thêm vàoList.
127.0.0.1:6379> SET not-a-list value
OK
127.0.0.1:6379> RPUSH list "value 1"
(integer) 1
127.0.0.1:6379> RPUSH list "value 2"
(integer) 2
127.0.0.1:6379> RPUSH not-a-list "value"
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> LPUSH list "value 3"
(integer) 3
127.0.0.1:6379> LPUSH list "value 4"
(integer) 4
127.0.0.1:6379> LPUSH not-a-list "value"
(error) WRONGTYPE Operation against a key holding the wrong kind of value
- Ta sử dụng command
RPOPđể xóa phần từ cuối cùng củaList,LPOPđể xóa phần từ đầu tiên củaList. - Khi key không tồn tại hoặc
Listrỗng thìRPOP,LPOPtrả về nil. - Khi key đã tồn tại nhưng value ứng với key không phải là
ListthìRPOP,LPOPtrả về lỗi. RPOP,LPOPtrả về phần tử đã được xóa khỏi list.
127.0.0.1:6379> RPOP list
"value 2"
127.0.0.1:6379> RPOP list
"value 1"
127.0.0.1:6379> LPOP list
"value 4"
127.0.0.1:6379> LPOP list
"value 3"
127.0.0.1:6379> RPOP list
(nil)
127.0.0.1:6379> LPOP list
(nil)
127.0.0.1:6379> RPOP not-a-list
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> LPOP not-a-list
(error) WRONGTYPE Operation against a key holding the wrong kind of value
- Ta sử dụng command
LLENđể biết được số phần tử có trongListtương ứng với key. - Khi key chưa tồn tại hoặc
Listứng với key rỗng thìLLENtrả về 0. - Khi value tương ứng với key không phải là
ListthìLLENtrả về lỗi.
127.0.0.1:6379> LLEN list
(integer) 4
127.0.0.1:6379> LLEN not-exists-list
(integer) 0
127.0.0.1:6379> LLEN not-a-list
(error) WRONGTYPE Operation against a key holding the wrong kind of value
- Ta sử dụng command
LRANGEđể lấy về những phần tử được lưu trongListtrong khoảng index xác định. - Index trong
Listđược tính từ 0 tăng dần từ trái sang phải (index của phần tử đầu tiên là 0, của phân tử tiếp theo bên phải là 1, tăng dần cho đến cuối). - Index trong
Listđược tính từ -1 giảm dần từ phải sang trái (index của phần tử cuối cùng là -1, của phần từ tiếp theo bên trái là -2, giảm dần cho đến đầu) - Để lấy về toàn bộ phần tử của
Listthì ta truyền 0 cho first index và -1 cho last index. - Khi first index lớn hơn số phần tử của
Listhoặc lớn hơn last index thìLLANGEtrả vềListrỗng. - Khi last index lớn hơn số hoặc bằng phần tử của
Listthì thìLRANGEtrả về đến phần tử cuối cùng củaList.
127.0.0.1:6379> LRANGE list 0 -1
1) "value 1"
2) "value 2"
3) "value 3"
4) "value 4"
127.0.0.1:6379> LRANGE list 0 2
1) "value 1"
2) "value 2"
3) "value 3"
127.0.0.1:6379> LRANGE list -3 -1
1) "value 2"
2) "value 3"
3) "value 4"
127.0.0.1:6379> LRANGE list 4 6
(empty list or set)
127.0.0.1:6379> LRANGE list 2 0
(empty list or set)
127.0.0.1:6379> LRANGE list 2 5
1) "value 3"
2) "value 4"
b. Set:
Set là kiểu dữ liệu tương tự như List, tuy nhiên các phần tử trong SET không có thứ tự nhất định và phần tử trong SET chỉ xuất hiện 1 lần.
Đối với kiểu sữ liệu Set, redis hỗ trợ các command SADD, SREM, SISMEMBER, SMEMBERS, SUNION.
- Ta sử dụng command
SADDđể thêm 1 phần tử vàoSettương ứng với key. - Trong trường hợp value ứng với key không là
SetthìSADDtrả về lỗi. - Trong trường hợp key chưa có value thì
Setrỗng được tạo trước khi thêm phần từ vàoSet. - Trong trường hợp phần tử chưa được thêm vào
SetthìSADDthêm phần từ vàoSetvà trả về 1. - Trong trường hợp phần tử chưa được thêm vào
SetthìSADDtrả về 0.
127.0.0.1:6379> SET not-a-set "value"
OK
127.0.0.1:6379> SADD not-a-set "value"
(error) WRONGTYPE Operation against a key holding the wrong kind of value
- Ta sử dụng command
SREMđể xóa phần tử khỏiSettương ứng với key. - Trong trường hợp value ứng với key không là
SetthìSREMtrả về lỗi. - Trong trường hợp phần tử chưa được xóa khỏi
SetthìSREMxóa phần từ khỏiSetvà trả về 1. - Trong trường hợp phần tử đã được xóa khỏi
SetthìSREMtrả về 0.
(integer) 0
127.0.0.1:6379> SREM not-a-set "value"
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> SREM set "value 1"
(integer) 1
127.0.0.1:6379> SREM set "value 1"
(integer) 0
- Ta sử dụng command
SISMEMBERđể kiểm tra phần tử có thuộcSettương ứng với key hay không. - Trong trường hợp value ứng với key không là
SetthìSISMEMBERtrả về lỗi. - Trong trường hợp phần tử thuộc
SetthìSISMEMBERtrả về 1. - Trong trường hợp phần tử không thuộc
SetthìSISMEMBERtrả về 0.
127.0.0.1:6379> SISMEMBER not-a-set "value"
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> SISMEMBER set "value 1"
(integer) 1
127.0.0.1:6379> SISMEMBER set "value 0"
(integer) 0
- Ta sử dụng command
SMEMBERSđể trả về tất cả phần tử củaSet. - Trong trường hợp value ứng với key không là
SetthìSMEMBERStrả về lỗi.
127.0.0.1:6379> SMEMBERS not-a-set
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> SMEMBERS set
1) "value 2"
2) "value 1"
- Ta sử dụng command
SUNIONđể trả vế tất cả phần tử của cácSetứng với các key truyền vào.
127.0.0.1:6379> SUNION set-1 set-2
1) "value 1"
2) "value 2"
3) "value 3"
4) "value 4"
c. Sorted Set:
Sorted Set là kiểu dữ liệu tương tự như Set, tuy nhiên các phần tử trong Sorted Set đi kèm với với 1 value nhất định, các phần tử trong Sorted Set được sắp xếp theo thứ tự tăng dần của các value này.
127.0.0.1:6379> ZADD sorted-set 1 "value 1"
(integer) 1
127.0.0.1:6379> ZADD sorted-set 0 "value 0"
(integer) 1
127.0.0.1:6379> ZADD sorted-set 2 "value 2"
(integer) 1
127.0.0.1:6379> ZRANGE sorted-set 0 -1
1) "value 0"
2) "value 1"
3) "value 2"
d. Hash:
Hashlà kiểu dữ liệu tham chiếu một string field với một string value tương ứng.
127.0.0.1:6379> HSET user name "TanThanhLe"
(integer) 1
127.0.0.1:6379> HSET user age "23"
(integer) 1
127.0.0.1:6379> HGETALL user
1) "name"
2) "TanThanhLe"
3) "age"
4) "23"
127.0.0.1:6379> HGET user name
"TanThanhLe"
4. Link tham khảo:
- Trang chủ redis: https://redis.io/
- Tutorial online: http://try.redis.io/
- Redis Commands: https://redis.io/commands
All rights reserved