Cách mà Redis hoạt động

Redis Hoạt Động Như Thế Nào?

Redis (Remote Dictionary Server) là một cơ sở dữ liệu NoSQL dạng Key-Value hoạt động hoàn toàn trong bộ nhớ (RAM), giúp truy xuất dữ liệu nhanh chóng. Nhưng làm thế nào Redis đạt được tốc độ ấn tượng như vậy? Hãy cùng tìm hiểu cách Redis hoạt động qua bài viết dưới đây.

Redis Cache


1. Nguyên Lý Hoạt Động Cơ Bản Của Redis

Redis hoạt động theo mô hình Client-Server với cơ chế lưu trữ dữ liệu dưới dạng cặp Key-Value.

  • Key: Là chuỗi nhận diện duy nhất cho một giá trị.
  • Value: Có thể là các kiểu dữ liệu như chuỗi, danh sách, tập hợp, hoặc thậm chí là các cấu trúc phức tạp hơn.

Cơ chế hoạt động:

  1. Client gửi yêu cầu tới Redis Server.
  2. Redis Server tìm kiếm dữ liệu trong bộ nhớ (RAM).
  3. Nếu Cache Hit (dữ liệu đã có), Redis trả về kết quả ngay lập tức.
  4. Nếu Cache Miss (không tìm thấy dữ liệu), Redis sẽ truy vấn xuống database (DB), sau đó lưu kết quả vào cache để sử dụng cho các lần tiếp theo.

Ví dụ minh họa:

SET user:1 "Nguyễn Kiều Phương"   # Lưu dữ liệu
GET user:1                        # Lấy dữ liệu

2. Các Thành Phần Chính Trong Redis

  • Redis Server: Xử lý các yêu cầu từ client.
  • Redis Client: Giao diện giao tiếp với Redis Server (có thể là PHP, Python, Node.js…).
  • Redis Storage (RAM): Nơi lưu trữ dữ liệu chính.
  • Redis Persistence: Cơ chế lưu trữ dữ liệu lâu dài (RDB, AOF).

3. Cơ Chế Cache Của Redis

Redis Cache

Redis hoạt động như một bộ nhớ đệm (cache) để tăng tốc ứng dụng. Quá trình như sau:

  1. Người dùng yêu cầu dữ liệu.
  2. Redis kiểm tra bộ nhớ cache.
  3. Nếu dữ liệu đã tồn tại, Redis trả về dữ liệu nhanh chóng.
  4. Nếu dữ liệu chưa tồn tại, Redis truy vấn DB gốc, sau đó lưu dữ liệu vào cache để phục vụ các lần truy vấn sau.

Ví dụ minh họa trong WordPress:

  • Khi người dùng truy cập website, Redis sẽ lưu trữ các kết quả truy vấn từ database MySQL để giảm thời gian tải trang.

4. Kiểu Dữ Liệu Redis

Redis không chỉ lưu trữ dữ liệu đơn giản mà còn hỗ trợ nhiều cấu trúc dữ liệu khác nhau:

  • String: Chuỗi ký tự (VD: SET key "value")
  • List: Danh sách (VD: LPUSH list1 "A" "B")
  • Set: Tập hợp không trùng lặp (VD: SADD set1 "A" "B")
  • Hash: Tập hợp các cặp key-value (VD: HSET user:1 name "Phương")
  • Sorted Set (ZSet): Tập hợp có xếp hạng (VD: ZADD leaderboard 100 "player1")

Ví dụ lưu trữ danh sách tên:

LPUSH users "Phương" "Huyền" "Minh"
LRANGE users 0 -1

Kết quả: [“Minh”, “Huyền”, “Phương”]


5. Cơ Chế Đồng Bộ Dữ Liệu (Persistence)

Redis lưu dữ liệu chủ yếu trong RAM, nhưng để đảm bảo dữ liệu không bị mất khi hệ thống gặp sự cố, Redis hỗ trợ 2 cơ chế đồng bộ:

RDB (Redis Database Backup)

  • Tạo snapshot định kỳ và lưu vào ổ đĩa.
  • Ưu điểm: Hiệu suất cao.
  • Nhược điểm: Có thể mất dữ liệu nếu hệ thống sập trước khi snapshot tiếp theo được tạo.

Kích hoạt RDB trong file redis.conf:

save 900 1   # Lưu sau 900 giây nếu có ít nhất 1 thay đổi
save 300 10  # Lưu sau 300 giây nếu có ít nhất 10 thay đổi

AOF (Append-Only File)

  • Ghi lại mọi thao tác ghi (write) vào một file log.
  • Ưu điểm: An toàn dữ liệu cao.
  • Nhược điểm: Hiệu suất chậm hơn RDB.

Kích hoạt AOF trong file redis.conf:

appendonly yes
appendfilename "appendonly.aof"

6. Cơ Chế Quản Lý Bộ Nhớ (Memory Management)

Redis sử dụng RAM để lưu trữ dữ liệu, nhưng không thể lưu trữ mãi. Redis hỗ trợ các chính sách eviction policy (chính sách loại bỏ dữ liệu cũ) như:

  • volatile-lru: Loại bỏ key ít được truy cập nhất trong các key có hạn TTL.
  • allkeys-lru: Loại bỏ key ít được truy cập nhất trong tất cả các key.
  • volatile-random: Xóa ngẫu nhiên các key có TTL.
  • allkeys-random: Xóa ngẫu nhiên bất kỳ key nào.
  • noeviction: Không xóa gì, trả lỗi nếu hết bộ nhớ.

Cấu hình trong redis.conf:

maxmemory 512mb
maxmemory-policy allkeys-lru

7. Bảo Mật Trong Redis

Redis không có cơ chế bảo mật mặc định, nhưng bạn có thể cấu hình các biện pháp sau:

Thiết Lập Mật Khẩu

requirepass "matkhau_redis_cua_ban"

Chỉ Cho Phép Truy Cập Nội Bộ

bind 127.0.0.1

Đổi Port Mặc Định

Redis sử dụng cổng mặc định 6379, bạn có thể thay đổi để tăng cường bảo mật:

port 6380

8. Replication – Nhân Bản Redis

Redis hỗ trợ Replication để đảm bảo tính khả dụng cao (HA).

  • Master: Xử lý ghi (write) và đọc (read).
  • Slave: Chỉ xử lý đọc (read), giúp giảm tải cho master.

Cấu hình slave trong redis.conf:

replicaof 192.168.1.10 6379

9. Redis Cluster – Mở Rộng Quy Mô

Redis hỗ trợ Cluster Mode để chia dữ liệu thành các shard khác nhau, giúp xử lý lượng dữ liệu lớn mà không làm giảm hiệu suất.

Cấu hình cluster trong redis.conf:

cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000

Tổng Kết

Redis hoạt động dựa trên cơ chế lưu trữ dữ liệu trong RAM, sử dụng mô hình Key-Value để tối ưu tốc độ truy xuất dữ liệu.

  • Ưu điểm: Tốc độ nhanh, hỗ trợ nhiều cấu trúc dữ liệu, khả năng mở rộng tốt.
  • Nhược điểm: Dữ liệu có thể mất nếu không cấu hình Persistence đúng cách.

💡 Nếu bạn cần tăng tốc website hoặc tối ưu hiệu suất ứng dụng, Redis chắc chắn là giải pháp không thể bỏ qua! 🚀

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *