Rzeczywisty magazyn danych i pamięć podręczna powinny być zsynchronizowane przy użyciu trzeciego podejścia, które już opisałeś w swoim pytaniu.
Gdy dodajesz dane do swojego magazynu ostatecznego (tj. bazy danych SQL), musisz umieścić te dane w kolejce do jakiejś magistrali usług lub kolejki wiadomości i pozwolić jakiejś usłudze asynchronicznej wykonać całą synchronizację przy użyciu jakiegoś procesu w tle.
Nie chcesz wchodzić w takie przypadki (gdy nie korzystasz z magistrali usług i usługi asynchronicznej):
- Spowolnij żądania lub procesy, ponieważ użytkownik musi poczekać, aż dane zostaną zapisane zarówno w bazie danych, jak i w pamięci podręcznej.
- Istnieje ryzyko niepowodzenia procesu buforowania i braku możliwości wprowadzenia zasad ponawiania prób (co zwykle jest funkcją wbudowaną w magistrali usług lub w niektórych kolejkach komunikatów). Ponadto ta awaria może zakończyć się częściowym lub całkowitym uszkodzeniem pamięci podręcznej i nie będziesz w stanie automatycznie i łatwo zaplanować niektórych zadań, aby naprawić tę sytuację.
Jeśli chodzi o używanie wygaśnięcia klucza Redis, to dobry pomysł. Ponieważ Redis może wygasać klucze za pomocą wbudowanego mechanizmu, nie należy implementować wygaśnięcia klucza z całego procesu w tle. Jeśli klucz istnieje, to dlatego, że jest nadal ważny.
BTW, nie zawsze będziesz w tej sprawie (jeśli klucz nie wygasł, oznacza to, że nie powinien zostać nadpisany). Może to zależeć od Twojej rzeczywistej domeny.