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
bgsavehoặcsave - 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
- Quá trình cha kiểm tra xem có đang thực thi lệnh
save,bgsavehaybgrewriteaofkhông. Nếu đang thực thi, lệnhbgsavetrả về ngay. - Quá trình cha thực hiện
forktạo con, trong giai đoạn này cha bị chặn, Redis không xử lý lệnh client. - Sau
fork, lệnhbgsavetrả "Background saving started" và tiếp tục xử lý lệnh khác. - 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ử.
- 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
- Truyền lệnh: Gửi lệnh và tham số đến AOF
- Thêm vào bộ đệm: Chuyển lệnh thành định dạng mạng, lưu vào bộ đệm
- 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ưuAOF_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