Redis là gì? Hướng dẫn database trong bộ nhớ cho lập trình viên

Biểu đồ phân tích hiệu suất hệ thống hiển thị trên màn hình lớn

Redis là gì?

Redis là cơ sở dữ liệu lưu trữ trong bộ nhớ (in-memory database) mã nguồn mở, hoạt động theo mô hình key-value store. Thay vì ghi dữ liệu xuống ổ cứng như các cơ sở dữ liệu truyền thống, Redis giữ toàn bộ dữ liệu trong RAM nên tốc độ đọc ghi có thể đạt dưới một phần nghìn giây. Redis do Salvatore Sanfilippo phát triển, ra mắt lần đầu vào năm 2009 và hiện là một trong những hệ thống lưu trữ phổ biến nhất thế giới, được hàng trăm nghìn dự án sử dụng.

Giao diện dòng lệnh redis-cli với các lệnh SET GET hiển thị dữ liệu

Điểm khác biệt lớn nhất giữa Redis và các cơ sở dữ liệu quan hệ như MySQL hay PostgreSQL nằm ở cách tổ chức dữ liệu. Redis không dùng bảng, không dùng SQL mà tổ chức dữ liệu theo cặp khóa – giá trị, mỗi khóa trỏ tới một giá trị thuộc một kiểu dữ liệu cụ thể. Nhờ thiết kế đơn giản nhưng tinh gọn, Redis phù hợp với những tác vụ cần độ trễ cực thấp như bộ nhớ đệm, lưu phiên đăng nhập, xếp hàng tác vụ hay giới hạn tốc độ yêu cầu.

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

Redis không chỉ đơn thuần lưu chuỗi ký tự mà hỗ trợ nhiều cấu trúc dữ liệu khác nhau, mỗi loại có bộ lệnh riêng:

  • String: chuỗi ký tự, kiểu dữ liệu cơ bản nhất, dùng để lưu giá trị đơn giản như số đếm, nội dung bộ nhớ đệm.
  • List: danh sách có thứ tự, phù hợp cho hàng đợi tác vụ hoặc lịch sử hoạt động.
  • Set: tập hợp không trùng lặp, dùng để lưu danh sách bạn bè, thẻ gắn nhãn.
  • Hash: đối tượng băm chứa nhiều trường, rất hợp để lưu thông tin người dùng.
  • Sorted Set: tập hợp có điểm số, dùng cho bảng xếp hạng, dữ liệu theo thời gian thực.
  • Stream: luồng dữ liệu dạng log, hỗ trợ xử lý sự kiện theo thời gian thực.

Chính sự đa dạng này giúp Redis vượt xa các giải pháp cache đơn giản, cho phép lập trình viên xây dựng cả hệ thống phân tích thời gian thực ngay trên lớp lưu trữ. Tài liệu chính thức của Redis mô tả đầy đủ cách dùng từng kiểu dữ liệu tại trang dữ liệu Redis.

Bộ nhớ đệm và thời gian sống của dữ liệu

Trung tâm dữ liệu với hàng máy chủ được tổ chức trên giá rack

Ứng dụng phổ biến nhất của Redis là làm bộ nhớ đệm (cache) nằm giữa ứng dụng và cơ sở dữ liệu chính. Khi có yêu cầu đọc, ứng dụng kiểm tra Redis trước, nếu dữ liệu đã có sẵn trong cache thì trả về ngay mà không cần truy vấn database, giảm tải đáng kể cho hệ thống. Mỗi khóa trong Redis có thể đặt thời gian sống TTL (Time To Live) bằng lệnh expire, sau thời gian đó dữ liệu tự động bị xóa. Cơ chế này giúp dữ liệu cache không bao giờ lỗi thời và bộ nhớ không bị đầy vì dữ liệu không còn dùng.

Ngoài cache, Redis còn được dùng làm nơi lưu phiên đăng nhập, giỏ hàng tạm thời, bộ đếm lượt xem hay cơ chế giới hạn tốc độ yêu cầu của API. Vì toàn bộ dữ liệu nằm trong RAM, việc tăng giảm giá trị số học như số lượt truy cập diễn ra gần như tức thì, ngay cả khi hệ thống đang chịu lưu lượng rất lớn.

Lưu trữ bền vững: RDB và AOF

Nhiều người lo ngại dữ liệu trong RAM sẽ mất hết khi máy chủ khởi động lại. Redis giải quyết vấn đề này bằng hai cơ chế lưu trữ bền vững bổ sung cho nhau:

  • RDB (Redis Database): chụp toàn bộ dữ liệu thành file snapshot định kỳ, phục hồi nhanh nhưng có thể mất dữ liệu phát sinh giữa hai lần chụp.
  • AOF (Append Only File): ghi nhật ký từng lệnh ghi vào file, an toàn hơn vì có thể phục hồi gần như toàn bộ dữ liệu, tuy file lớn hơn.

Biểu đồ phân tích hiệu suất hệ thống hiển thị trên màn hình lớn

Nhà vận hành có thể bật cả hai cơ chế cùng lúc để cân bằng giữa tốc độ phục hồi và độ an toàn dữ liệu. Chi tiết cấu hình được trình bày trong tài liệu persistence của Redis. Từ phiên bản 7, Redis còn cải tiến cơ chế ghi AOF đa phần, giảm đáng kể thời gian khởi động lại khi dữ liệu lớn.

Sao chép dữ liệu, cụm và pub/sub

Redis hỗ trợ sao chép dữ liệu theo mô hình primary – replica. Máy chủ chính nhận lệnh ghi, các máy sao chép đồng bộ dữ liệu và phục vụ yêu cầu đọc, giúp hệ thống mở rộng theo chiều ngang và chịu lỗi tốt hơn. Ở quy mô lớn hơn, Redis Cluster chia dữ liệu thành 16.384 hash slot phân bổ trên nhiều nút, tự động chuyển tiếp yêu cầu và chuyển đổi dự phòng khi một nút gặp sự cố. Bên cạnh đó, cơ chế publish/subscribe cho phép các ứng dụng trao đổi thông điệp theo thời gian thực, dùng cho thông báo, chat hoặc cập nhật dữ liệu trực tiếp giữa các dịch vụ.

Redis so với Memcached

Memcached là giải pháp cache lâu đời và đơn giản hơn, chỉ hỗ trợ kiểu dữ liệu chuỗi, không có persistence, không sao chép dữ liệu. Redis vượt trội về tính năng: nhiều kiểu dữ liệu, persistence, replication, cluster, pub/sub và khả năng chạy script Lua ngay trên máy chủ. So sánh chi tiết từ AWS cho thấy Memcached phù hợp khi chỉ cần cache đơn giản với dữ liệu nhỏ, còn Redis là lựa chọn đúng khi cần tính năng phong phú, độ bền dữ liệu hoặc mô hình dữ liệu phức tạp, xem tại bài viết so sánh Redis và Memcached.

Các phiên bản Redis mới có gì

Redis 7 giới thiệu ACL v2, Redis Functions giúp quản lý script tập trung, client-side caching và sharded pub/sub, cùng nhiều cải tiến hiệu năng được giới thiệu trong bài viết giới thiệu Redis 7. Các phiên bản gần đây còn bổ sung khả năng tìm kiếm vector và engine truy vấn, đưa Redis trở thành lựa chọn cho cả ứng dụng AI cần truy xuất dữ liệu nhanh. Lưu ý rằng từ Redis 7.4, dự án chuyển sang giấy phép mới SSPL và RSALv2 thay vì BSD thuần túy, do đó doanh nghiệp cần kiểm tra điều khoản sử dụng thương mại trước khi triển khai.

Khi nào nên dùng Redis?

Redis phù hợp nhất với hệ thống có lưu lượng đọc cao, cần phản hồi tức thì: trang thương mại điện tử, ứng dụng chat, bảng xếp hạng game, hệ thống phân tích thời gian thực. Ngược lại, nếu dữ liệu cần truy vấn phức tạp nhiều điều kiện, quan hệ chặt chẽ giữa các bảng, cơ sở dữ liệu quan hệ truyền thống vẫn là lựa chọn chính, còn Redis đóng vai trò lớp tăng tốc phía trước. Kiến trúc phổ biến hiện nay là kết hợp cả hai: database quan hệ lưu dữ liệu chính thức, Redis cache kết quả truy vấn thường xuyên để giảm tải và tăng tốc phản hồi.

Tham khảo thêm

Nếu bạn muốn tìm hiểu sâu hơn, hãy bắt đầu từ tài liệu phát triển chính thức của Redistrang tổng quan kiểu dữ liệu. Đây là hai nguồn cập nhật nhất về cú pháp lệnh, cấu hình và các tính năng mới của Redis.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

ORM là gì? Hướng dẫn ánh xạ database cho người mới

ORM (Object-Relational Mapping) là kỹ thuật ánh xạ dữ liệu giữa cơ sở dữ liệu quan hệ và ngôn ngữ lập trình hướng đối tượng. Nói đơn giản, ORM biến…

Xem thêm

C++ là gì? Hướng dẫn toàn diện cho người mới bắt đầu

C++ là gì? Đây là ngôn ngữ lập trình bậc cao ra đời năm 1985 do Bjarne Stroustrup tạo ra, được xem là bản nâng cấp của ngôn ngữ C…

Xem thêm

GraphQL là gì? Hướng dẫn toàn diện cho lập trình viên

GraphQL là gì và tại sao nó đang trở thành lựa chọn thay thế REST API trong nhiều dự án web lớn? GraphQL là ngôn ngữ truy vấn và runtime…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất