Tìm hiểu về Redis

Hế lô mọi người. Hiện nay thì NoSQL ngày càng phổ biến trong các hệ thống công nghệ thông tin bởi những ưu điểm vượt trội của nó (mình đã có một bài viết so sánh SQL và NoSQL). Và vì thế mình sẽ quyết định viết một bài giới thiệu về một hệ quản trị dữ liệu NoSQL khá phổ biến hiện nay. Bắt đầu thôiiiii!!!

Giới thiệu về Redis

Redis (viết tắt của Remote Dictionary Serve) là một cơ sở dữ liệu NoSQL mã nguồn mở được viết bằng C bởi nhà phát triển Salvatore Sanfilippo vào ngày 10 tháng 4 năm 2009.
Redis là một cơ sở dữ liệu trong bộ nhớ (in-memory) có nghĩa là dữ liệu được lưu trữ trên bộ nhớ RAM của máy chủ lưu trữ. Vì thế Redis rất nhanh trong việc tìm kiếm vì nó không phải chờ cho ổ cứng truyền thống tìm kiếm và đọc nhiều lần.

Các đặc trưng cơ bản của Redis

Hiệu năng

Tất cả dữ liệu của Redis nằm trong RAM, nó cho phép truy cập dữ liệu với độ trễ thấp và thông lượng cao. Không giống như csdl truyên thống, kho lưu trữ dữ liệu trong bộ nhớ không yêu cầu phải chuyển đến đĩa, nên nó sẽ giảm độ trễ xuống micro giây. Do đó, các kho lưu trữ dữ liệu trong bộ nhớ có thể hỗ trợ nhiều thao tác hơn và phản hồi nhanh hơn. Kết quả là hiệu suất cực nhanh với thao tác đọc và ghi trung bình chỉ mất chưa đến một phần nghìn giấy và tới hàng triệu thao tác mỗi giây.

Mô hình dữ liệu

Khác với RDMB như MySQL, PostgreSQ thì Redis không có bảng. Redis lưu trữ dữ liệu dưới dạng key-value. Thực tế thì memcache cũng làm vậy, nhưng kiểu dữ liệu của memcache bị hạn chế, không đa dạng như Redis.
  • Strings: 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à xoá 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, xoá 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, xoá 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 scroe này. Redis hỗ trợ thao tác thêm, đọc, xoá từng phần tử, lấy các phần tử dựa theo range của sroce hoặc string.

Đơn giản và dễ sử dụng

Redis cho phép ta viết mã đơn giản hơn để lưu trữ, truy cập và sử dụng dữ liệu trong các ứng dụng so với các câu lệnh truy vấn phức tạp của các cơ sở dữ liệu truyền thống. Ví dụ: ta có thể sử dụng cấu trúc dữ liệu băm để di chuyển dữ liệu đến kho dữ liệu chỉ với một dòng mã, trong khi đối với cơ sở dữ liệu quan hệ ta cần phải viết nhiều dòng lệnh để chuyển đổi từ định dạng này sang định dạng khác. Redis đi kèm với cấu trúc dữ liệu gốc và nhiều tuỳ chọn để thao tác và tương tác với dữ liệu của mình.

Tính nhân rộng và sự bền bỉ

Redis sử dụng kiến trúc bảo sao chính và hỗ trợ sao chép không đồng bộ, nơi dữ liệu có thể sao chép sang nhiều máy chủ bản sao. Điều này cũng cấp hiệu suất đọc được cải thiện (vì yêu cầu có thể phân chia ra giữa các máy chủ) và hồi phục nhanh hơn khi máy chủ chính gặp sự cố. Đề bền bỉ, Redis hỗ trợ sao lưu theo thời gian (sao chép tập dữ liệu Redis vào đĩa).
Redis cung cấp 2 phương thức chính cho việc sao lưu dữ liệu ra ổ cứng, đó là RDB và AOF.
  • RDB (Redis Database File): thực hiện tạo và sao lưu snapshot của DB vào ổ cứng sau mỗi khoảng thời gian nhất định.
  • AOF (Append Only File): lưu lại tất cả các thao tác write dữ liệu mà server nhận được, các thao tác này sẽ được chạy lại khi restart server hoặc tái thiết lập dataset ban đầu.

Tính khả dụng và khả năng mở rộng cao

Redis cung cấp một kiến trúc bản sao chính trong một nút chính hoặc một cấu trúc liên kết nhóm. Điều này cho phép ta xây dựng các giải pháp có tính khả dụng cao, cung cấp hiệu suất và độ tin cậy nhất quán.

Mã nguồn mở

Redis là một dự án mã nguồn mở được hỗ trợ bởi một cộng đồng lớn, bao gồm AWS.

Trường hợp sử dụng phổ biến của Redis

Bộ nhớ đệm

Redis là một lựa chọn tốt khi ta cần triển khai bộ nhớ đệm trong bộ nhớ có sẵn với tính khả dụng cao để giảm độ trễ truy cập dữ liệu, tăng thông lượng và giảm tải cơ sở dữ liệu. Redis cung cấp khả năng phản hồi dưới mili giây và cho phép dễ dàng mở rộng quy mô để có tải cao hơn mà không quá tốn kém.

Nhắn tin

Redis hỗ trợ Pub/Sub với tính năng so khớp mẫu và nhiều cấu trúc dữ liệu khác nhau như lists, sorted sets và hashes. Điều này cho phép Redis hỗ trợ các phòng trò chuyện hiệu suất cao, luồng bình luận thời gian thực

Bảng xếp hạng trò chơi

Redis là một lựa chọn phổ biến cho các nhà phát triển game khi cần xây dựng bảng xếp hạng trò chơi thực. Chỉ cần sử dụng cấu trúc dữ liệu Redis Stored Set cấu trúc này cung cấp tính duy nhất của các phần tử trong khi vẫn duy trì danh sách được sắp xếp theo điểm số của người dùng.

Lưu trữ phiên

Redis là một kho lưu trữ dữ liệu trong bộ nhớ với tính khả dụng cao và bền bỉ nên nó sẽ là lựa chọn phổ biết của các nhà phát triển ứng dụng cần lưu trữ và quản lý dữ liệu theo phiên cho các ứng dụng với quy mô Internet. Redis cung cấp độ trễ dưới mili giây, quy mô và khả năng phục hồi cần thiết để quản lý dữ liệu phiên như hồ sơ người dùng, thông tin đăng nhập, trạng thái phiên và cá nhân hoá riêng cho người dùng.

Học máy và phân tích thời gian thực

Các ứng dụng hướng dữ liệu hiện đại yêu cầu máy học để xử lý nhanh chóng một khối lượng lớn, đa dạng cũng như việc tự động hoá ra quyết định. Redis cũng có thể sử dụng cới các giải pháp trực tuyến như Apache Kafka và Amazon Kinesis như một kho lưu trữ dữ liệu trong bộ nhớ để nhập, xử lý và phân tích dữ liệu thời gian thực với độ trễ dưới mili giây.

Trên đây là tổng quan về Redis do mình tìm hiểu được, cảm ơn các bạn đã theo dõi và mong các bạn hãy ủng hộ mình bằng cách đọc thêm nhiều bài khác nữa nhé.