Cơ Chế Lưu Trữ Persistent trong Redis: RDB, AOF và Chế Độ Kết Hợp

RDB (Redis Database)

RDB là phương thức lưu trữ mặc định của Redis, thực hiện qua cơ chế chụp ảnh (snapshotting) từ trạng thái bộ nhớ.

Phương thức kích hoạt

  • Thỏa mãn quy tắc cấu hình tùy chỉnh
  • Thực thi lệnh bgsave hoặc save
  • Thực thi lệnh flushdb
  • Thao tác sao chép chủ - phụ (lần đầu)

Cấu hình tham số

Trong redis.conf:

save 600 5
save 120 2

Quy trình thực thi

  1. Quá trình cha kiểm tra xem có đang thực thi lệnh save, bgsave hay bgrewriteaof không. Nếu đang thực thi, lệnh bgsave trả về ngay.
  2. Quá trình cha thực hiện fork tạo con, trong giai đoạn này cha bị chặn, Redis không xử lý lệnh client.
  3. Sau fork, lệnh bgsave trả "Background saving started" và tiếp tục xử lý lệnh khác.
  4. Quá trình con tạo tệp RDB từ trạng thái bộ nhớ cha, thay thế tệp gốc bằng nguyên tử.
  5. Quá trình con gửi tín hiệu cho cha, cha cập nhật thống kê.

Cấu trúc tệp

  • Phần đầu 5 byte: REDIS
  • 4 byte: Phiên bản RDB
  • Trường phụ: KEY-VALUE
  • Số lượng cơ sở dữ liệu
  • Kích thước từ điển
  • KEY hết hạn
  • Dữ liệu chính: KEY-VALUE
  • Dấu hiệu kết thúc
  • Check sum kiểm tra tệp

Ưu điểm RDB

  • Tệp nhị phân nén, chiếm ít dung lượng, dễ truyền tải
  • Tối ưu hiệu năng nhờ tạo con mà không chặn quá trình chính

Nhược điểm RDB

  • Mất dữ liệu sau lần chụp ảnh cuối

AOF (Append Only File)

AOF lưu trữ lịch sử lệnh ghi, không kích hoạt mặc định. Redis ghi lại tất cả lệnh viết vào tệp AOF, phục hồi bằng cách thực thi tuần tự.

Cấu hình

Trong redis.conf:

aof_enabled yes
aof_dir /data/redis
aof_filename redis_aof.log

Nguyên lý hoạt động

  1. Truyền lệnh: Gửi lệnh và tham số đến AOF
  2. Thêm vào bộ đệm: Chuyển lệnh thành định dạng mạng, lưu vào bộ đệm
  3. Ghi tệp: Ghi vào tệp AOF khi điều kiện thỏa mãn, dùng fsync

Chế độ lưu

  • AOF_FSYNC_NO: Không lưu
  • AOF_FSYNC_EVERYSEC: Lưu mỗi giây (mặc định)
  • AOF_FSYNC_ALWAYS: Lưu sau mỗi lệnh

Tối ưu AOF (Rewriting)

Ví dụ tối ưu hóa lệnh:

set user_id 123
set user_id 456
set role admin

→ Được tối ưu thành:

set user_id 456
set role admin

Phương thức kích hoạt

Trong redis.conf:

auto_aof_rewrite_ratio 100
auto_aof_rewrite_min_size 64mb

Kích hoạt thủ công

bgrewriteaof

Chế độ kết hợp RDB + AOF

Redis 4.0 hỗ trợ kết hợp RDB và AOF. Khi AOF rewrite, nội dung RDB được ghi đầu tệp AOF.

Kích hoạt trong redis.conf:

aof_use_rdb_preamble yes

Thẻ: Redis rdb aof persistence hybrid-mode

Đăng vào ngày 26 tháng 5 lúc 10:43