Redis cơ bản (P1): Cài đặt và sử dụng
Qua bài viết này, bạn sẽ:
– Biết cách cài đặt, setup và chạy Redis ở máy local của bạn.
– Biết cách sử dụng một số command cơ bản.
– Hiểu được expiration
Việc download Redis về máy tính và setup là vô cùng đơn giản. Tuy nhiên, nếu bạn chỉ muốn xem và thực hành một vài command cơ bản của nó, bạn có thể thử ngay bây giờ tại trang web chính thức: http://try.redis.io/
Cài đặt
- Download Redis tại đây: https://github.com/MicrosoftArchive/redis/releases/tag/win-2.8.17.4
- Sau khi giải nén, đặt folder Redis ở vị trí tùy ý. Sau đó mở command prompt, di chuyển đến folder nơi bạn đã đặt Redis.
- Gõ lệnh sau để install:
1redis-server --service-install redis.windows.conf
- Chọn Yes khi màn hình confirm hiện ra.
Như vậy là quá trình install đã hoàn tất.
Start/Stop server
Sau khi cài đặt xong, bạn cần start server Redis trước khi có thể thao tác với nó.
Để start server, gõ lệnh như sau:
1
|
redis-server --service-start
|
Để dừng server thì có thể sử dụng lệnh sau:
1
|
redis-server --service-stop
|
Sử dụng
Sau khi đã start server Redis, bạn có thể dùng lệnh
1
|
redis-cli
|
để kết nối với server và bắt đầu dùng thử các command của Redis.
Redis là một key-value store, chính vì thế mà cú pháp của nó cũng vô cùng đơn giản như sau:
COMMAND KEY VALUE
Với:
– COMMAND là mã lệnh, có thể là GET, SET, vv…
– KEY là tên key
– VALUE là giá trị để set cho key, nếu command là SET thì không cần gán giá trị cho value.
Lệnh Get/Set
Để set giá trị cho 1 key, ta dùng lệnh SET:
1
|
SET company:name “VTI Japan”
|
Nếu không có vấn đề gì xảy ra (không bị sai syntax, server không bị down…) thì bạn sẽ nhận được response message với nội dung là OK, tức là lệnh SET đã được thực hiện thành công.
Để truy vấn giá trị của 1 key, ta dùng lệnh GET:
1
|
GET company:name
|
Kết quả nhận được lần này sẽ là giá trị mà bạn đã SET cho key trên, tức là “VTIJapan”.
Lệnh INCR
Redis cung cấp lệnh INCR, với tính năng tương tự như toán tử ++:
1
2
3
|
SET count 10
INCR count --> 11
INCR count --> 12
|
Sau khi gõ 2 lần INCR, bây giờ nếu GET count , bạn sẽ nhận được giá trị là 12
Điều đặc biệt là INCR là một trong những operation mang tính atomic, điều này có nghĩa là giúp ngăn chặn lỗi xảy ra khi có từ 2 user trở lên cùng thao tác trên một key.
Giả sử ta có 2 client cùng đăng nhập vào hệ thống. Nếu ta thực hiện việc tăng giá trị cho count theo lối thông thường thì:
- Client A sẽ đọc giá trị count là 10
- Client B cũng đọc giá trị count là 10
- Client A làm phép toán, tính ra giá trị 11 và set vào count
- Client B cũng làm phép toán, tính ra giá trị 11 và set vào count
Như vậy, giá trị nhận được sau khi 2 client cùng thao tác sẽ là 11 chứ không phải 12 như mong đợi! Toán tử INCR, cùng với nhiều operation khác mà Redis cung cấp, giúp ngăn chặn vấn đề này do tính chất atomic của nó.
Trường hợp key không có value trước đó, Redis sẽ xem như giá trị ban đầu là 0, và khi INCR chạy lần đầu, nó sẽ cộng thêm 1 vào giá trị 0 đó:
1
2
|
DEL count --> nil
INCR count --> 1
|
Ta đã delete key count và value của nó, rồi gọi lệnh INCR cho count. Như vậy, lúc này giá trị của count sau khi lệnh INCR chạy xong sẽ bằng 1.
Expiration của một key
Như ta đã biết, Redis là một in-memory database, điều đó có nghĩa là toàn bộ database được lưu trong RAM thay vì trong ổ cứng. Điều này đồng nghĩa với việc việc truy xuất dữ liệu sẽ vô cùng nhanh, đổi lại chúng ta không thể lưu trữ quá nhiều data do sự hạn chế về dung lượng của RAM.
Để giải quyết phần nào vấn đề đó, ta có thể chỉnh thời hạn expiration cho một key.
1
2
|
SET my-key “About to die”
EXPIRE my-key 120
|
Câu lệnh EXPIRE trên với parameter 120 sẽ set thời hạn tồn tại cho key my-key là 120s.
Bạn có thể kiểm tra thời gian tồn tại còn lại của key bằng lệnh TTL (viết tắt của time-to-live):
1
|
TTL my-key
|
Thử sử dụng TTL vài lần và bạn sẽ thấy giá trị trả về giảm dần cho đến 0 rồi sang -2 (-2 biểu thị là key này không tồn tại). Trước khi giá trị này về 0, khi gọi lệnh GET thì bạn vẫn sẽ lấy được giá trị của my-key. Dĩ nhiên, sau khi đã hết thời hạn thì lệnh GET sẽ cho ra kết quả là nil.
Lưu ý:
- Một key chưa được set expiration thì TTL sẽ trả về giá trị -1
- Một key không hoặc không còn tồn tại thì TTL sẽ cho kết quả -2
- Việc thay đổi giá trị của một key sẽ làm mất expiration của nó cho đến khi ta set lại expiration một lần nữa.
Redis cũng không quá khó để bắt đầu đúng không nào? Mời các bạn đón đọc phần tiếp theo để được giới thiệu về các kiểu dữ liệu trong Redis, cách sử dụng Strings và Lists, và nhiều điều thú vị khác nữa nhé!