Trong bài viết này mình sẽ giúp bạn hiểu rõ những khái niệm về redis là gì? Cũng như ứng dụng redis vào dự án của mình như thế nào.
Hiện nay có rất nhiều loại cơ sở dữ liệu, từ NoSQL như MongoDB nổi lên như một hiện tượng, cho đến MySQL lão làng, mình đã có bài phân tích giữa 2 loại cơ sở dữ liệu này các bạn có thể xem qua bài viết: MongoDB hay MySQL? Nên chọn cơ sở dữ liệu nào cho dự án của bạn?
Và Redis xuất hiện, rất nhiều developer ứng dụng vào dự án của mình, vậy Redis là gì? Có những tính năng nào nổi bật? Tôi có thể ứng dụng vào dự án hiện tại của mình như thế nào?
Redis là gì?
Redis là cơ sở dữ liệu NoSQL, lưu trữ dữ liệu với dạng KEY-VALUE với nhiều tính năng được sử dụng rộng rãi. Nó có thể hỗ trợ nhiều kiểu dữ liệu như: strings, hashes, lists, sets, sorted. Đồng thời có thể cho phép scripting bằng ngôn ngữ Lua.
Redis ngoài tính năng lưu trữ KEY-VALUE trên RAM thì Redis còn hỗ trợ tính năng lưu trữ dữ liệu trên đĩa cứng cho phép bạn có thể phục hồi dữ liệu khi hệ thống gặp sự cố.
Redis hỗ trợ tính năng replication(master-slave) cho phép bạn có thể sao chép, đồng bộ giữa 2 CSDL Redis với nhau. Ngoài ra còn có tính năng cluster cũng đang được phát triển cho phép load balancing(cân bằng tải): https://redis.io/topics/cluster-tutorial
Redis có những ưu điểm gì?
- Redis hỗ trợ thêm mới, cập nhật, xoá dữ liệu một cách nhanh chóng.
- Lưu trữ dữ liệu dạng KEY-VALUE.
- Dữ liệu được lưu trữ trên RAM giúp việc truy xuất dữ liệu một cách nhanh chóng. Ngoài ra bạn có thể cấu hình để Redis có thể lưu trữ dữ liệu trên ổ cứng.
- Bạn có thể cấu hình cho key tự động xoá trong khoảng thời gian nhất định(expire).
- Hỗ trợ nhiều loại kiểu dữ liệu khác nhau.
- Hỗ trợ Queue(hàng đợi) thông qua cơ chế PUB/SUB, chúng ta có thể dùng Redis để làm hệ thống queue cho website xử lý tuần tự từng request.
Các kiểu dữ liệu trong Redis:
- STRING: string, integer hoặc float. Redis có thể làm việc với cả string, từng phần của string, cũng như tăng/giảm giá trị của integer, float.
- LIST: danh sách liên kết của các strings. Redis hỗ trợ các thao tác push, pop từ cả 2 phía của list, trim dựa theo offset, đọc 1 hoặc nhiều items của list, tìm kiếm và xóa giá trị.
- SET: tập hợp các string (không được sắp xếp). Redis hỗ trợ các thao tác thêm, đọc, xóa từng phần tử, kiểm tra sự xuất hiện của phần tử trong tập hợp. Ngoài ra Redis còn hỗ trợ các phép toán tập hợp, gồm intersect/union/difference.
- HASH: lưu trữ hash table của các cặp key-value, trong đó key được sắp xếp ngẫu nhiên, không theo thứ tự nào cả. Redis hỗ trợ các thao tác thêm, đọc, xóa từng phần tử, cũng như đọc tất cả giá trị.
- ZSET (sorted set): là 1 danh sách, trong đó mỗi phần tử là map của 1 string (member) và 1 floating-point number (score), danh sách được sắp xếp theo score này. Redis hỗ trợ thao tác thêm, đọc, xóa từng phần tử, lấy ra các phần tử dựa theo range của score hoặc của string.
Ứng dụng vào dự án hiện tại như thế nào?
Hiện nay có rất nhiều website sử dụng Redis để caching cho website của mình từ những cơ sở dữ liệu như MySQL đã quá nặng nề. Giúp làm tăng tốc quá trình đọc dữ liệu, do Redis đọc dữ liệu từ RAM cho nên tốc độ truy xuất nhanh hơn, giảm thời gian tải trang cho website của mình.
Khi có bất kỳ thay đổi về dữ liệu như Update, Insert, Delete trong MySQL thì hệ thống sẽ đồng thời cập nhật dữ liệu trên Redis để giúp dữ liệu có thể đồng bộ được với nhau.
Hoặc các bạn có thể sử dụng Redis để làm hệ thống Tracking cho website của mình, do Redis hỗ trợ đọc ghi rất nhanh cho nên chúng ta có thể làm hệ thống đếm view cho website.
Để có thể quản lý được Redis bằng giao diện web các bạn có thể sử dụng công cụ phpRedisAdmin: https://github.com/erikdubbelboer/phpRedisAdmin để quản lý các database.