Bộ nhớ cache và lưu trữ dữ liệu thực tế phải được đồng bộ hóa bằng cách sử dụng cách tiếp cận thứ ba mà bạn đã mô tả trong câu hỏi của mình.
Khi bạn thêm dữ liệu vào kho lưu trữ cuối cùng của mình (tức là cơ sở dữ liệu SQL của bạn), bạn cần xếp dữ liệu này vào hàng đợi của một số xe buýt dịch vụ hoặc hàng đợi tin nhắn và để một số dịch vụ không đồng bộ thực hiện đồng bộ hóa toàn bộ bằng cách sử dụng một số loại quy trình nền.
Bạn không muốn gặp phải trường hợp này (khi không sử dụng xe buýt dịch vụ và dịch vụ không đồng bộ):
- Thực hiện các yêu cầu hoặc quy trình của bạn chậm hơn vì người dùng cần đợi cho đến khi dữ liệu được lưu trữ trong cơ sở dữ liệu và bộ nhớ cache của bạn.
- Có nguy cơ bị lỗi trong quá trình lưu vào bộ nhớ đệm và không thể có chính sách thử lại (thường là một tính năng được tích hợp sẵn trong xe buýt dịch vụ hoặc một số hàng đợi tin nhắn). Ngoài ra, lỗi này có thể dẫn đến hỏng bộ nhớ cache một phần hoặc toàn bộ và bạn sẽ không thể lên lịch tự động và dễ dàng một số tác vụ để khắc phục tình trạng này.
Về việc sử dụng khóa Redis hết hạn, đó là một ý kiến hay. Vì Redis có thể hết hạn khóa bằng cách sử dụng cơ chế tích hợp của nó, bạn không nên triển khai hết hạn khóa từ toàn bộ quy trình nền. Nếu khóa tồn tại là do khóa đó vẫn hợp lệ.
BTW, bạn sẽ không luôn ở trong trường hợp này (nếu khóa chưa hết hạn có nghĩa là nó không nên bị ghi đè). Nó có thể phụ thuộc vào miền thực tế của bạn.