Redis là gì? Giải thích khái niệm cốt lõi

Redis là viết tắt của Remote Dictionary Server, một hệ thống lưu trữ dữ liệu cấu trúc trong bộ nhớ mã nguồn mở, hoạt động như một cơ sở dữ liệu key-value với tốc độ siêu nhanh. Khác với các cơ sở dữ liệu truyền thống lưu dữ liệu trên ổ cứng, Redis lưu toàn bộ dữ liệu trên RAM, giúp thời gian truy xuất chỉ tính bằng micro giây. Điều này biến Redis trở thành lựa chọn hàng đầu cho các ứng dụng cần hiệu năng cao như caching, session management, real-time analytics và message queuing.
Redis hỗ trợ nhiều kiểu dữ liệu phong phú bao gồm strings, hashes, lists, sets, sorted sets, bitmaps, hyperloglogs và geospatial indexes. Mỗi kiểu dữ liệu đều có các lệnh riêng biệt để thao tác, giúp Redis linh hoạt hơn nhiều so với các giải pháp key-value đơn thuần khác như Memcached.
Lịch sử phát triển của Redis

Redis được tạo ra bởi Salvatore Sanfilippo vào năm 2009 với mục tiêu giải quyết vấn đề scaling cho startup của anh tại Ý. Ban đầu, Redis chỉ là một dự án cá nhân nhưng nhanh chóng thu hút sự chú ý của cộng đồng nhờ hiệu năng vượt trội. Năm 2015, Redis Labs (nay là Redis Inc.) được thành lập để phát triển thương mại hóa. Tính đến năm 2024, Redis đã vượt mốc 10 triệu lượt tải xuống Docker và được sử dụng bởi hơn 8.000 doanh nghiệp lớn trên toàn cầu.
Kiến trúc và cách Redis hoạt động

Mô hình client-server đơn luồng
Redis hoạt động theo mô hình client-server với kiến trúc đơn luồng (single-threaded) cho phần xử lý lệnh. Điều này nghe có vẻ hạn chế nhưng thực tế lại là điểm mạnh. Nhờ cơ chế event loop và non-blocking I/O, Redis có thể xử lý hàng trăm nghìn requests mỗi giây trên một luồng duy nhất mà không gặp vấn đề về race condition hay locking phức tạp.
Cơ chế lưu trữ trong bộ nhớ
Redis lưu toàn bộ dataset trong RAM, cho phép thời gian đọc ghi trung bình dưới 1 mili giây. Tuy nhiên, để đảm bảo dữ liệu không bị mất khi mất điện, Redis cung cấp hai cơ chế persistence: RDB (Redis Database Backup) tạo snapshot định kỳ và AOF (Append Only File) ghi lại mọi thao tác ghi. Kết hợp cả hai giúp cân bằng giữa hiệu năng và độ an toàn dữ liệu.
Giao thức RESP
Redis sử dụng giao thức RESP (REdis Serialization Protocol) đơn giản nhưng hiệu quả. Giao thức này hỗ trợ các kiểu dữ liệu như simple strings, errors, integers, bulk strings và arrays. RESP giúp việc giao tiếp giữa client và server trở nên nhẹ nhàng, dễ dàng implement trên nhiều ngôn ngữ lập trình.
Các kiểu dữ liệu trong Redis
| Kiểu dữ liệu | Mô tả | Ví dụ lệnh | Ứng dụng điển hình |
|---|---|---|---|
| String | Chuỗi ký tự, có thể chứa text, số, nhị phân | SET key value, GET key | Cache HTML, đếm số lượt truy cập |
| Hash | Bảng băm chứa field-value pairs | HSET user:1 name “Alice”, HGETALL user:1 | Lưu thông tin người dùng, session |
| List | Danh sách liên kết các phần tử theo thứ tự | LPUSH queue task1, RPOP queue | Hàng đợi message, timeline |
| Set | Tập hợp các phần tử không trùng lặp | SADD tags “redis”, SMEMBERS tags | Lưu tags, bạn bè, unique visitors |
| Sorted Set | Tập hợp có điểm số, tự động sắp xếp | ZADD leaderboard 100 user1, ZRANGE leaderboard 0 10 | Bảng xếp hạng, hàng đợi ưu tiên |
| Bitmap | Mảng bit, tiết kiệm bộ nhớ | SETBIT user:login 0 1, GETBIT user:login 0 | Theo dõi trạng thái online, A/B testing |
| HyperLogLog | Xấp xỉ số lượng phần tử duy nhất | PFADD unique:visitors “ip1”, PFCOUNT unique:visitors | Đếm unique visitors với bộ nhớ cực thấp |
| Geospatial | Dữ liệu tọa độ địa lý | GEOADD locations 13.36 38.11 “Palermo”, GEODIST locations “Palermo” “Catania” | Ứng dụng bản đồ, tìm địa điểm gần nhất |
Lợi ích khi sử dụng Redis

Hiệu năng vượt trội
Redis có thể xử lý hơn 100.000 lệnh đọc/ghi mỗi giây trên một instance đơn. Trong các benchmark thực tế, Redis đạt độ trễ dưới 1 mili giây cho 99% requests. So với cơ sở dữ liệu quan hệ như MySQL, Redis nhanh hơn từ 10 đến 100 lần cho các tác vụ đọc đơn giản.
Đa dạng kiểu dữ liệu
Không chỉ đơn thuần là key-value store, Redis hỗ trợ 8 kiểu dữ liệu khác nhau, cho phép xây dựng các cấu trúc phức tạp ngay trong bộ nhớ. Ví dụ,
Redis là mã nguồn mở hoàn toàn miễn phí theo giấy phép BSD.
Redis hỗ trợ nhiều kiểu dữ liệu hơn (hash, list, set, sorted set), có persistence, replication và cluster. Memcached chỉ hỗ trợ string đơn giản, không có persistence. Redis phù hợp cho caching phức tạp và lưu trữ dữ liệu tạm thời, trong khi Memcached tối ưu cho caching đơn giản với bộ nhớ đa luồng.
Redis có thể thay thế hoàn toàn MySQL không?
Không. Redis là in-memory database, không phù hợp cho lưu trữ dữ liệu lâu dài, truy vấn phức tạp hay transaction ACID. Redis thường được dùng kết hợp với MySQL: MySQL lưu dữ liệu chính, Redis cache dữ liệu nóng để tăng tốc độ truy xuất.
Redis có hỗ trợ transaction không?
Redis hỗ trợ transaction thông qua lệnh MULTI, EXEC, DISCARD và WATCH. Tuy nhiên, transaction trong Redis không có rollback và không hỗ trợ ACID đầy đủ. Các lệnh trong transaction được thực thi tuần tự, không bị chen ngang bởi lệnh khác, nhưng nếu một lệnh thất bại, các lệnh trước đó vẫn được commit.
Làm thế nào để xóa tất cả dữ liệu trong Redis?
Dùng lệnh FLUSHALL để xóa tất cả dữ liệu trong tất cả database, hoặc FLUSHDB để xóa database hiện tại. Cả hai lệnh đều blocking và không thể undo. Trong production, chỉ nên dùng khi thực sự cần thiết và đã backup dữ liệu.
Redis có hỗ trợ Lua scripting không?
Có. Redis tích hợp sẵn Lua interpreter, cho phép chạy script Lua trên server bằng lệnh EVAL. Script Lua chạy atomic, không bị chen ngang, giúp thực hiện nhiều thao tác phức tạp trong một lần gọi, giảm network round-trips.
Kết luận
Redis đã trở thành công cụ không thể thiếu trong kiến trúc hệ thống hiện đại nhờ tốc độ siêu nhanh, đa dạng kiểu dữ liệu và khả năng mở rộng linh hoạt. Từ caching, session management đến real-time analytics và message queuing, Redis giải quyết hiệu quả các bài toán về hiệu năng mà cơ sở dữ liệu truyền thống gặp khó khăn.
Việc nắm vững Redis không chỉ giúp bạn tối ưu ứng dụng mà còn mở ra cơ hội xây dựng các hệ thống có khả năng xử lý hàng triệu requests mỗi giây. Bắt đầu với những kiến thức cơ bản như cài đặt, cấu hình và các kiểu dữ liệu, sau đó dần dần khám phá các tính năng nâng cao như Redis Cluster, Redis Streams và Lua scripting. Với cộng đồng lớn mạnh và tài liệu phong phú, Redis là khoản đầu tư xứng đáng cho bất kỳ kỹ sư phần mềm nào muốn nâng cao hiệu năng hệ thống.







