Redis là hệ quản trị cơ sở dữ liệu NoSQL mã nguồn mở, nổi bật với tốc độ truy xuất dữ liệu cực nhanh. Nhờ hiệu năng cao và khả năng mở rộng linh hoạt, Redis được sử dụng rộng rãi trong nhiều hệ thống hiện đại. Trong bài viết sau, Tenten sẽ giúp bạn có cái nhìn rõ ràng hơn về Redis là gì, các ứng dụng phổ biến và cách cài đặt chi tiết.
Contents
Redis (REmote DIctionary Server) là một hệ quản trị cơ sở dữ liệu NoSQL mã nguồn mở, lưu trữ dữ liệu theo cặp Key-Value (Khóa – Giá trị), hoạt động trên bộ nhớ trong (in-memory).
Với cơ chế In-memory, Redis sẽ lưu trữ và quản lý dữ liệu trực tiếp trên bộ nhớ chính (RAM) thay vì trên ổ cứng như các hệ thống truyền thống. Nhờ đó, Redis có tốc độ truy xuất dữ liệu cực nhanh, độ trễ cực thấp và thường được ứng dụng làm bộ nhớ đệm (cache) hoặc hệ thống lưu trữ tạm.
Bên cạnh tốc độ xử lý siêu nhanh, Redis còn hỗ trợ nhiều kiểu dữ liệu, có tính ổn định cao và khả năng mở rộng linh hoạt, đáp ứng hiệu quả các nhu cầu xử lý dữ liệu trong các hệ thống hiện đại.

Để hiểu rõ hơn Redis là gì, bạn cần nắm vững cơ chế hoạt động của Redis.
Redis vận hành theo mô hình client-server, gồm hai thành phần chính:
Redis hỗ trợ nhiều kiểu triển khai khác nhau, phù hợp với từng quy mô và yêu cầu hệ thống:
Standalone (Đơn lẻ)
Standalone là mô hình đơn giản nhất, trong đó Redis chạy dưới dạng một instance độc lập. Toàn bộ dữ liệu đều được lưu trữ và xử lý tại một server duy nhất. Standalone phù hợp với các ứng dụng nhỏ, không yêu cầu mở rộng hoặc khả năng chịu lỗi cao. Tuy nhiên, nếu server gặp sự cố, hệ thống sẽ mất khả năng truy cập dữ liệu.
Redis Replication (Nhân bản Redis)
Redis Replication gồm một server chính (Master) và một hoặc nhiều server phụ (Replica/Slave) để sao chép dữ liệu từ Master. Khi Master gặp sự cố, việc chuyển đổi sang Replica cần được thực hiện thủ công hoặc thông qua Redis Sentinel nhằm đảm bảo tính liên tục và độ sẵn sàng cao.
Redis Sentinel
Redis Sentinel là hệ thống giám sát và điều phối phân tán, có nhiệm vụ theo dõi trạng thái của các Redis instance, tự động phát hiện sự cố và thực hiện chuyển đổi Master khi cần thiết. Đồng thời, Sentinel cũng cung cấp cho client thông tin về vị trí của Master hiện tại để đảm bảo kết nối luôn chính xác.
Redis Cluster (Cụm phân tán)
Redis Cluster là mô hình gồm nhiều nút Redis kết hợp thành một hệ thống phân tán. Dữ liệu được tự động phân vùng trên các nút khác nhau với mỗi nút quản lý một phần dữ liệu riêng.
Các Sentinel trong cụm sẽ giám sát trạng thái của các nút Master và Replica và tự động điều phối khi xảy ra sự cố. Redis Cluster cho phép Redis mở rộng quy mô dễ dàng, đồng thời nâng cao khả năng chịu lỗi và độ bền của hệ thống.

Redis hỗ trợ các kiểu dữ liệu phổ biến như Strings, Lists, Sets, Sorted Sets (ZSets), Hashes, Bitmaps, HyperLogLogs, Geospatial Indexes và Streams,
String là kiểu dữ liệu cơ bản và được sử dụng nhiều nhất trong Redis. Dữ liệu String được lưu trữ ở dạng nhị phân (binary-safe), vì vậy có thể chứa hầu hết mọi loại dữ liệu như ảnh JPEG, Ruby object. Mỗi giá trị String có độ dài tối đa 512 MB.
Để thao tác với kiểu dữ liệu này, Redis sử dụng các lệnh như SET để gán giá trị cho key và GET để truy xuất dữ liệu. Nếu key đã tồn tại, lệnh SET sẽ ghi đè lên giá trị cũ, bất kể key đó được liên kết với giá trị không phải là string.

List là kiểu dữ liệu lưu trữ một danh sách các chuỗi (String) được sắp xếp theo đúng thứ tự các phần tử được chèn vào. Redis cho phép thêm phần tử vào đầu danh sách bằng lệnh LPUSH hoặc vào cuối danh sách bằng lệnh RPUSH.
Một List sẽ được tạo tự động khi thực hiện thao tác LPUSH hoặc RPUSH với một key chưa tồn tại. Ngược lại, nếu tất cả phần tử trong List bị xóa, key tương ứng cũng sẽ được Redis tự động loại bỏ khỏi cơ sở dữ liệu.

Set là tập hợp các chuỗi (String) không có thứ tự. Sets cho phép thêm, đọc, xóa phần tử cũng như kiểm tra sự tồn tại của một phần tử trong Set với thời gian mặc định là O(1), bất kể số lượng phần tử trong tập hợp.
Ngoài ra, Redis còn hỗ trợ các phép toán trên tập hợp như Union (hợp), Intersection (giao) và Difference (hiệu). Mỗi Set có thể chứa tối đa 2³² – 1 (khoảng 4,29 tỷ) phần tử.

Hashes là kiểu dữ liệu lưu trữ hash table gồm các cặp key-value, trong đó các key được sắp xếp ngẫu nhiên và không theo bất kỳ thứ tự cố định nào. Hashes thường được sử dụng để lưu trữ các object, chẳng hạn như một user với các thuộc tính name, age, address,… Mỗi Hash có thể chứa tối đa 2³² – 1 cặp key-value.

Sorted Set (ZSet) là kiểu dữ liệu lưu trữ một tập hợp các String không trùng lặp, trong đó mỗi member được ánh xạ với một giá trị score kiểu floating-point number. Các member luôn là duy nhất, trong khi score có thể trùng lặp.
Nhờ cấu trúc này, ZSet cho phép thực hiện các thao tác thêm, cập nhật và xóa member rất nhanh với thời gian tỷ lệ theo logarit của số lượng phần tử.

Bitmap thực chất là một chuỗi (String) được thao tác ở cấp độ bit. Bitmap cực kỳ tối ưu về bộ nhớ khi cần theo dõi trạng thái nhị phân (Đúng/Sai, Đã xem/Chưa xem, Trạng thái online) của hàng triệu người dùng, đồng thời hỗ trợ các phép toán bitwise (AND, OR, XOR) hiệu quả.
HyperLogLogs là cấu trúc dữ liệu xác suất (probabilistic data structure) được thiết kế để ước tính số lượng phần tử duy nhất (cardinality) trong một tập hợp. Điểm nổi bật của nó là khả năng tiết kiệm bộ nhớ khổng lồ; nó có thể đếm hàng tỷ phần tử với tỷ lệ sai số cực thấp nhưng chỉ tiêu tốn một lượng dung lượng cố định rất nhỏ (khoảng vài KB).
Streams là một kiểu dữ liệu đóng vai trò như một bản ghi chỉ thêm vào (append-only log), hoạt động như một message broker hoặc hàng đợi tin nhắn (message queue) mạnh mẽ trong các hệ thống hướng sự kiện.
Mỗi mục nhập trong Stream chứa một ID duy nhất và các cặp khóa-giá trị, hỗ trợ các tính năng như nhóm người tiêu dùng (consumer groups) và lọc theo thời gian thực. Streams rất phù hợp để xây dựng các ứng dụng cần xử lý sự kiện, ghi log hệ thống hoặc kiến trúc phân tán.
Geospatial indexes cung cấp khả năng lưu trữ và truy vấn các tọa độ địa lý (kinh độ và vĩ độ) bằng cách sử dụng kỹ thuật Geohash. Cấu trúc này hỗ trợ các tính năng như tìm kiếm các vị trí nằm trong một bán kính cụ thể, tính khoảng cách giữa hai điểm, hoặc thêm và xóa các địa điểm một cách nhanh chóng.
Geospatial indexes được áp dụng rộng rãi trong các ứng dụng định vị để tìm các nhà hàng, tài xế hoặc điểm dịch vụ gần nhất.
Các module chính của Redis gồm:
Persistent Redis là tính năng cho phép lưu trữ dữ liệu từ bộ nhớ RAM xuống đĩa cứng, giúp ngăn chặn mất dữ liệu khi máy chủ khởi động lại hoặc gặp sự cố, khắc phục nhược điểm mất toàn bộ dữ liệu của Redis mặc định.
Redis hỗ trợ hai phương thức lưu trữ chính là RDB (Redis Database) và AOF (Append Only File).
RDB có nhiệm vụ tạo các snapshot của cơ sở dữ liệu và lưu chúng xuống ổ cứng sau mỗi khoảng thời gian nhất định.
Ưu điểm:
Nhược điểm:
AOF đảm nhận công việc ghi lại toàn bộ các thao tác write mà Redis nhận được. Khi restart server hoặc tái thiết lập dataset ban đầu, các thao tác này sẽ được chạy lại
Ưu điểm:
Nhược điểm:

Bảng dưới đây sẽ giúp bạn dễ dàng phân biệt Redis với những hệ quản trị cơ sở dữ liệu khác như MySQL, MongoDB hay Memcached:
|
Tiêu chí |
Redis |
MySQL |
MongoDB |
Memcached |
|
Loại CSDL |
NoSQL Key-Value lưu trên RAM |
CSDL quan hệ (RDBMS) |
NoSQL dạng Document |
Bộ nhớ đệm Key-Value trên RAM |
|
Hiệu suất truy cập |
Cực nhanh nhờ xử lý trong RAM |
Khá nhanh, tùy cấu hình |
Tốc độ tốt với dữ liệu Document |
Cực nhanh nhờ lưu trong RAM |
|
Hỗ trợ transaction |
Có (MULTI/EXEC), không rollback |
Hỗ trợ đầy đủ chuẩn ACID |
Có (từ v4.0 trở lên) |
Không hỗ trợ |
|
Mô hình lưu trữ |
Key-Value và nhiều kiểu dữ liệu |
Dữ liệu dạng bảng |
Document BSON |
Key-Value |
|
Khả năng mở rộng |
Cluster và sharding |
Chủ yếu scale-up, có thể scale-out với Cluster/Sharding |
Scale-out bằng sharding |
Hỗ trợ triển khai theo cụm |
|
Lưu trữ lâu dài |
Có (RDB, AOF) |
Có trên ổ đĩa |
Có trên ổ đĩa |
Không, dữ liệu mất khi khởi động lại |
|
Truy vấn dữ liệu |
Chỉ hỗ trợ truy vấn đơn giản |
Hỗ trợ SQL nâng cao |
Truy vấn Document linh hoạt |
Chỉ truy xuất theo key |
|
Sử dụng tài nguyên |
Chủ yếu dùng RAM |
Chủ yếu dùng ổ đĩa, có cache RAM |
Lưu trên ổ đĩa, hỗ trợ cache |
Chỉ sử dụng RAM |
|
Khả năng chịu lỗi |
Sentinel và Cluster hỗ trợ failover |
Replication và backup |
Replica Set với failover tự động |
Không có failover tích hợp |
|
Ngôn ngữ hỗ trợ |
Hầu hết ngôn ngữ phổ biến |
Hỗ trợ đa nền tảng |
Hỗ trợ đa nền tảng |
Hỗ trợ đa nền tảng |
|
Mức độ sử dụng |
Dễ học, lệnh đơn giản |
Cần nắm SQL và mô hình quan hệ |
Thao tác trên JSON, mức trung bình |
Rất dễ triển khai |
|
Ứng dụng điển hình |
Cache, Session, Queue, Realtime |
Hệ thống giao dịch và dữ liệu quan hệ |
Dữ liệu bán cấu trúc, ứng dụng linh hoạt |
Cache dữ liệu tốc độ cao |
Mặc dù mang lại nhiều lợi ích đáng kể về hiệu năng xử lý dữ liệu, Redis vẫn tồn tại một số hạn chế cần cân nhắc trước khi triển khai.
Nhờ cơ chế lưu trữ dữ liệu trên bộ nhớ RAM cùng kiến trúc tối ưu, Redis trở thành lựa chọn phổ biến trong nhiều hệ thống hiện đại. Một số lợi ích nổi bật gồm:

Bên cạnh những ưu điểm trên, Redis cũng có một số hạn chế như:
Nhờ tốc độ xử lý cao, khả năng lưu trữ dữ liệu trên RAM và hỗ trợ nhiều cấu trúc dữ liệu, Redis được ứng dụng rộng rãi trong nhiều hệ thống hiện đại. Một số ứng dụng phổ biến của Redis gồm:

Sau khi đã hiểu rõ Redis là gì, bạn có thể tiến hành cài đặt Redis trên Linux, macOS hay Windows để tối ưu hiệu năng xử lý dữ liệu của hệ thống:
Để cài đặt Redis trên Ubuntu, bạn có thể thực hiện theo các bước dưới đây.
Bước 1: Cập nhật hệ thống
Trước khi cài đặt, hãy cập nhật danh sách gói và nâng cấp các gói hiện có để đảm bảo hệ thống luôn ở trạng thái mới nhất.
sudo apt update
sudo apt upgrade
Bước 2: Cài đặt Redis
Sử dụng trình quản lý gói APT để cài đặt Redis trên Ubuntu.
sudo apt install redis-server
Bước 3: Khởi động và kích hoạt Redis
Sau khi cài đặt hoàn tất, kích hoạt Redis để dịch vụ tự động khởi động cùng hệ thống, đồng thời khởi chạy Redis ngay lập tức.
sudo systemctl enable redis-server
sudo systemctl start redis-server
Bước 4: Kiểm tra trạng thái Redis
Sử dụng lệnh dưới đây để kiểm tra xem dịch vụ Redis đã chạy thành công hay chưa.
sudo systemctl status redis
Nếu Redis đang hoạt động bình thường, trạng thái dịch vụ sẽ hiển thị là active (running).
Bước 5: Cấu hình Redis (tùy chọn)
Nếu cần thay đổi các thiết lập của Redis, chẳng hạn như cổng kết nối, mật khẩu hoặc địa chỉ IP lắng nghe, bạn có thể chỉnh sửa tệp cấu hình bằng lệnh:
sudo nano /etc/redis/redis.conf
Sau khi hoàn tất việc chỉnh sửa, lưu tệp cấu hình và khởi động lại Redis để áp dụng các thay đổi.
sudo systemctl restart redis
Bước 6: Kiểm tra Redis
Mở giao diện dòng lệnh của Redis bằng lệnh:
redis-cli
Sau đó nhập lệnh sau:
ping
Nếu Redis được cài đặt và hoạt động chính xác, hệ thống sẽ trả về kết quả:
PONG
Nếu sử dụng macOS, bạn có thể cài đặt Redis thông qua Homebrew theo các bước dưới đây.
Bước 1: Cài đặt Homebrew
Nếu máy chưa cài đặt Homebrew, hãy chạy lệnh sau để cài đặt:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Bước 2: Cài đặt Redis
Sau khi cài đặt Homebrew thành công, sử dụng lệnh dưới đây để cài đặt Redis:
brew install redis
Bước 3: Khởi động Redis
Để Redis tự động chạy dưới dạng một service, thực hiện lệnh:
brew services start redis
Hoặc nếu chỉ muốn khởi động Redis theo cách thủ công, sử dụng:
redis-server
Bước 4: Kiểm tra Redis
Mở Redis CLI bằng lệnh:
redis-cli
Sau đó nhập:
ping
Nếu Redis hoạt động bình thường, hệ thống sẽ trả về:
PONG
Redis không hỗ trợ chính thức trên Windows, tuy nhiên bạn vẫn có thể cài đặt và sử dụng Redis thông qua Windows Subsystem for Linux (WSL). Các bước thực hiện như sau:
Bước 1: Cài đặt WSL
Mở PowerShell hoặc Windows Terminal với quyền Administrator, sau đó chạy lệnh sau để cài đặt WSL cùng một bản phân phối Linux (mặc định là Ubuntu):
wsl --install
Sau khi quá trình cài đặt hoàn tất, hãy khởi động lại máy tính nếu hệ thống yêu cầu.
Bước 2: Cài đặt Redis trên WSL
Mở Ubuntu (hoặc bản phân phối Linux khác đã cài đặt trong WSL), sau đó thực hiện các bước cài đặt Redis tương tự như hướng dẫn dành cho Ubuntu/Linux, bao gồm cập nhật hệ thống, cài đặt Redis và khởi động dịch vụ.
Bước 3: Khởi động và kiểm tra Redis
Sau khi cài đặt hoàn tất, khởi động Redis rồi mở Redis CLI bằng lệnh:
redis-cli
Tiếp theo, nhập lệnh:
ping
Nếu Redis hoạt động bình thường, hệ thống sẽ trả về:
PONG
Có. Redis hỗ trợ lưu trữ dữ liệu lâu dài thông qua hai cơ chế Persistence là RDB và AOF, giúp khôi phục dữ liệu khi hệ thống khởi động lại hoặc gặp sự cố.
Không. Redis không phải là message broker chuyên dụng, nhưng vẫn hỗ trợ các tính năng Pub/Sub và Streams để xây dựng hệ thống truyền tin và xử lý thông điệp theo thời gian thực.
Có. Redis là một trong những giải pháp cache phổ biến nhất nhờ khả năng lưu trữ dữ liệu trên RAM, giúp tăng tốc độ truy xuất và giảm tải cho cơ sở dữ liệu chính.
Redis hỗ trợ hầu hết các ngôn ngữ lập trình phổ biến như Python, Java, C#, JavaScript, Go, PHP, Ruby, Node.js và nhiều ngôn ngữ khác thông qua các thư viện (client) tương ứng.
Có, Redis (Remote Dictionary Server) là một hệ quản trị cơ sở dữ liệu NoSQL mã nguồn mở lưu trữ dữ liệu trên bộ nhớ trong (in-memory).
Redis cache là cách ứng dụng sử dụng Redis làm một lớp bộ nhớ đệm. Thay vì liên tục truy vấn dữ liệu từ database chính vốn mất nhiều thời gian, hệ thống sẽ ưu tiên lấy từ Redis.
Memcached là một hệ thống lưu trữ bộ nhớ đệm (cache) phân tán mã nguồn mở, hoạt động hoàn toàn trên RAM.
Redis không chỉ là một giải pháp lưu trữ dữ liệu mà còn là nền tảng mạnh mẽ cho các ứng dụng yêu cầu hiệu năng cao và tốc độ xử lý nhanh. Nhờ hỗ trợ nhiều cấu trúc dữ liệu, cơ chế Persistence, khả năng mở rộng linh hoạt và thực thi các tác vụ phức tạp, Redis đã trở thành một trong những hệ quản trị cơ sở dữ liệu được sử dụng phổ biến trong các hệ thống hiện đại.