Действителното съхранение на данни и кеш паметта трябва да бъдат синхронизирани с помощта на третия подход, който вече описахте във вашия въпрос.
Докато добавяте данни към окончателното си хранилище (т.е. вашата SQL база данни), вие трябва да поставите тези данни в опашка на някаква сервизна шина или опашка от съобщения и да оставите някаква асинхронна услуга да извърши цялата синхронизация, използвайки някакъв фонов процес.
Не искате да влизате в тези случаи (когато не използвате сервизна шина и асинхронна услуга):
- Направете вашите заявки или процеси по-бавни, защото потребителят трябва да изчака, докато данните се съхранят както във вашата база данни, така и в кеша.
- Имате риск от неуспех по време на процеса на кеширане и да не можете да имате политика за повторен опит (която обикновено е вградена функция в сервизната шина или някои опашки за съобщения). Освен това този неуспех може да завърши с частична или пълна повреда на кеша и няма да можете автоматично и лесно да планирате някаква задача, за да коригирате тази ситуация.
Относно използването на изтичане на ключа Redis е добра идея. Тъй като Redis може да изтече срока на валидност на ключовете, използвайки вградения си механизъм, не трябва да прилагате изтичане на ключ от целия фонов процес. Ако ключът съществува, е защото все още е валиден.
BTW, няма да сте винаги на този случай (ако ключът не е изтекъл, това означава, че не трябва да се презаписва). Може да зависи от действителния ви домейн.