Bài 11: Redis Persistence
Giới thiệu về Persistence trong Redis:
Persistence (lưu trữ bền vững) trong Redis:
- Redis là một cơ sở dữ liệu in-memory, nghĩa là dữ liệu được lưu trữ chủ yếu trong bộ nhớ RAM để đảm bảo tốc độ truy xuất nhanh. Tuy nhiên, để đảm bảo dữ liệu không bị mất khi hệ thống gặp sự cố hoặc khi Redis được khởi động lại, Redis cung cấp các phương pháp lưu trữ bền vững (persistence) để ghi dữ liệu ra đĩa.
Các phương pháp lưu trữ dữ liệu:
- Redis hỗ trợ hai phương pháp lưu trữ chính: RDB (Redis Database File) và AOF (Append-Only File).
RDB (Redis Database File):
Mô tả:
- RDB tạo ra các snapshots (ảnh chụp nhanh) của dữ liệu tại các thời điểm cụ thể và lưu chúng vào đĩa. Mỗi snapshot lưu trữ toàn bộ trạng thái của cơ sở dữ liệu tại thời điểm đó.
Cách hoạt động:
- Redis sẽ tạo ra một file RDB chứa tất cả các dữ liệu hiện có trong bộ nhớ tại các khoảng thời gian đã định sẵn hoặc khi có yêu cầu. File này có thể được sử dụng để khôi phục dữ liệu khi Redis được khởi động lại.
Ưu điểm:
RDB giúp phục hồi dữ liệu nhanh chóng vì file RDB chứa toàn bộ dữ liệu tại một thời điểm nhất định.
Ít tốn kém tài nguyên hệ thống hơn vì chỉ ghi dữ liệu ra đĩa tại các khoảng thời gian đã định sẵn.
Nhược điểm:
- Có thể mất một lượng dữ liệu nhỏ giữa các lần snapshots, đặc biệt nếu Redis gặp sự cố trước khi tạo snapshot mới.
Cú pháp và cấu hình:
Cấu hình các khoảng thời gian và số lượng thay đổi cần thiết để tạo snapshots trong file
redis.conf:save 900 1 # Tạo snapshot mỗi 900 giây nếu có ít nhất 1 thay đổi save 300 10 # Tạo snapshot mỗi 300 giây nếu có ít nhất 10 thay đổi save 60 10000 # Tạo snapshot mỗi 60 giây nếu có ít nhất 10000 thay đổiBạn cũng có thể tạo snapshot thủ công bằng lệnh:
BGSAVE
AOF (Append-Only File):
Mô tả:
- AOF ghi lại mọi thay đổi lên dữ liệu vào một file log. Mỗi lệnh ghi dữ liệu (write operation) được thêm vào cuối file log này, giúp đảm bảo tất cả các thay đổi đều được lưu trữ.
Cách hoạt động:
- Khi Redis khởi động lại, nó sẽ đọc file AOF và thực hiện lại tất cả các lệnh ghi dữ liệu để khôi phục trạng thái cơ sở dữ liệu.
Ưu điểm:
AOF cung cấp khả năng phục hồi dữ liệu cao hơn vì nó ghi lại mọi thay đổi, giảm thiểu khả năng mất dữ liệu.
AOF có thể được cấu hình để thực hiện các lệnh ghi dữ liệu theo thời gian thực hoặc ở các khoảng thời gian nhất định.
Nhược điểm:
AOF có thể làm tăng tải hệ thống vì cần ghi dữ liệu ra đĩa thường xuyên hơn.
File AOF có thể trở nên rất lớn theo thời gian, đòi hỏi phải thực hiện việc compact (thu gọn) định kỳ để giảm kích thước.
Cú pháp và cấu hình:
Kích hoạt AOF trong file
redis.conf:appendonly yes appendfilename "appendonly.aof"Cấu hình tần suất ghi dữ liệu ra đĩa:
# appendfsync luôn ghi dữ liệu ra đĩa sau mỗi lệnh ghi (write operation) appendfsync always # appendfsync ghi dữ liệu ra đĩa mỗi giây appendfsync everysec # appendfsync không đảm bảo việc ghi dữ liệu ra đĩa, tùy thuộc vào hệ điều hành appendfsync noThực hiện việc compact file AOF bằng lệnh:
BGREWRITEAOF
So sánh RDB và AOF:
RDB:
Ưu điểm:
Tạo snapshots giúp phục hồi dữ liệu nhanh chóng.
Ít tốn kém tài nguyên hệ thống hơn.
Nhược điểm:
Có thể mất một lượng dữ liệu nhỏ giữa các lần snapshots.
Không phù hợp cho các ứng dụng yêu cầu tính bền vững dữ liệu cao.
AOF:
Ưu điểm:
Ghi lại mọi thay đổi giúp giảm thiểu khả năng mất dữ liệu.
Có thể cấu hình để ghi dữ liệu theo thời gian thực.
Nhược điểm:
Tăng tải hệ thống do ghi dữ liệu thường xuyên.
File AOF có thể trở nên rất lớn và cần được compact định kỳ.
Lựa chọn giữa RDB và AOF:
Khi nào nên sử dụng RDB:
Khi cần phục hồi dữ liệu nhanh chóng và ứng dụng có thể chấp nhận mất một lượng dữ liệu nhỏ giữa các lần snapshots.
Khi muốn giảm tải hệ thống và tiết kiệm tài nguyên.
Khi nào nên sử dụng AOF:
Khi cần đảm bảo tính bền vững cao nhất cho dữ liệu và không muốn mất bất kỳ thay đổi nào.
Khi ứng dụng yêu cầu ghi dữ liệu theo thời gian thực hoặc các khoảng thời gian rất ngắn.
Ví dụ cấu hình kết hợp cả RDB và AOF:
Cấu hình trong
redis.conf:# Cấu hình RDB save 900 1 save 300 10 save 60 10000 # Kích hoạt AOF appendonly yes appendfilename "appendonly.aof" appendfsync everysec
Câu hỏi củng cố kiến thức:
RDB và AOF khác nhau như thế nào về cách lưu trữ dữ liệu?
- RDB tạo snapshots dữ liệu tại các thời điểm cụ thể, còn AOF ghi lại mọi thay đổi lên dữ liệu vào một file log.
Lợi ích của việc sử dụng RDB là gì?
- RDB giúp phục hồi dữ liệu nhanh chóng và ít tốn kém tài nguyên hệ thống.
Nhược điểm của việc sử dụng AOF là gì?
- AOF có thể làm tăng tải hệ thống và file AOF có thể trở nên rất lớn.
Lệnh nào dùng để tạo snapshot dữ liệu thủ công trong Redis?
BGSAVE.
Cấu hình nào trong Redis giúp ghi dữ liệu ra đĩa theo thời gian thực với AOF?
appendfsync always.
Kết luận:
- Redis cung cấp hai phương pháp lưu trữ bền vững (persistence) chính: RDB và AOF, mỗi phương pháp có ưu và nhược điểm riêng. Việc lựa chọn giữa RDB và AOF phụ thuộc vào yêu cầu cụ thể của ứng dụng về tính bền vững và hiệu suất. Bạn cũng có thể kết hợp cả hai phương pháp để tận dụng lợi thế của từng phương pháp và đảm bảo tính nhất quán và an toàn cho dữ liệu của mình.