TỔNG QUAN VỀ REDIS

Redis là gì?

Redis là một dạng open source key-value store rất phổ biến hiện nay. Redis được dùng nhiều để xây dựng các web app có performance và khả năng scalable cao.

Các đặc điểm của Redis

  • Redis còn là một loại in-memory storage, tức là toàn bộ database của nó được lưu tại RAM thay vì ổ cứng.
  • Số lượng data types được định nghĩa trong Redis nhiều hơn hẳn so với các loại key-value storage khác.
  • Redis có thể sao chép data sang nhiều slaves khác nhau.

Ưu điểm của Redis

  • Tốc độ nhanh rõ rệt: do truy xuất dữ liệu trên RAM, tốc độ query dữ liệu của Redis là cực kỳ nhanh, có thể lên đến 110000 lệnh SETs mỗi giây, 81000 GETs mỗi giây.
  • Hỗ trợ nhiều loại data types khác nhau: Redis hỗ trợ hầu hết các loại data types được các developers hay dùng hiện nay như list, set, sorted set, và hashes. Điều này giúp ta dễ dàng hơn để giải quyết nhiều bài toán khác nhau khi mà một loại data type cụ thể nào đó mạnh/dễ dùng hơn các loại khác.
  • Dù là NOSQL database, nhưng các operation ở Redis vẫn có tính chất atomic, tức là nếu có từ 2 clients trở lên cùng vào database, Redis server sẽ luôn cập nhật giá trị data mỗi khi có thay đổi.
  • Redis có thể được dùng trong nhiều use-cases khác nhau chẳng hạn như caching, messaging-queues (Redis hỗ trợ Publish/Subscribe một cách native), các data có vòng đời ngắn trong application như sessions, hit counts…

So sánh Redis với các loại key-value store khác

  • Redis hỗ trợ nhiều loại data type khác nhau, và các operation của Redis có tính chất atomic.
  • Redis là in-memory database, nên tốc độ của Redis là cực kỳ nhanh. Đổi lại, database của Redis không thể lớn hơn độ lớn của memory.
  • Cũng chính vì là in-memory database nên kiến trúc database của Redis có độ phức tạp thấp, và dễ thao tác hơn so với các loại database lưu trên ổ cứng.

Các kiểu dữ liệu của Redis

STRING: Có thể là 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.

Master/Slave Replication

Đây không phải là đặc trưng quá nổi bật, các DBMS khác đều có tính năng này, tuy nhiên chúng ta nêu ra ở đây để nhắc nhở rằng, Redis không kém cạnh các DBMS về tình năng Replication.

Clustering

Nếu sử dụng MySQL, bạn phải trả phí để có thể sử dụng tính năng này, còn với họ NoSQL DBMS, tính năng này hoàn toàn free. Tuy nhiên, Redis Cluster đang ở phiên bản alpha, và chúng ta sẽ cùng chờ đợi phiên bản chính thức ra đời. Chúng ta sẽ đề cập đến tính năng này qua 1 bài viết khác, khi Redis Cluster có phiên bản chính thức.

In-memory

Đây là điều gây ấn tượng mạnh nhất với tác giả khi bắt đầu tìm hiểu về Redis. Không như các DBMS khác lưu trữ dữ liệu trên đĩa cứng, Redis lưu trữ dữ liệu trên RAM, và đương nhiên là thao tác đọc/ghi trên RAM. Với người làm CNTT bình thường, ai cũng hiểu thao tác trên RAM nhanh hơn nhiều so với trên ổ cứng, nhưng chắc chắn chúng ta sẽ có cùng câu hỏi: Điều gì xảy ra với data của chúng ta khi server bị tắt? Rõ ràng là toàn bộ dữ liệu trên RAM sẽ bị mất khi tắt server, vậy làm thế nào để Redis bảo toàn data và vẫn duy trì được ưu thế xử lý dữ liệu trên RAM. Chúng ta sẽ cùng tìm hiểu về cơ chế lưu dữ liệu trên ổ cứng của Redis trong phần tiếp theo của bài viết.

Kết luận

Như đã giới thiệu ở trên, Redis hiện nay được cho là dễ dùng hơn một số loại key-value store khác vì nó vừa mang tính chất đơn giản và những ưu điểm đặc thù của một key- value store (mà điền hình là full-text search), lại vừa “thân thiện”, dễ dùng, đa tính năng nhờ vào việc có thể áp dụng những kiểu data types thông dụng như list, sort, set… Redis sẽ là một lựa chọn tốt cho các bài toán database không cần tuổi thọ quá lâu mà lại mong muốn có độ truy xuất tối ưu như là giỏ hàng…, đổi lại, việc là một in-memory database khiển cho Redis khó có thể là một database chính được. Dù Redis vẫn có khả năng sao lưu dữ liệu trước khi shutdown memory, nhưng các use-case dùng song song Redis với một RDMBS vẫn là phổ biến hơn cả.