Cześć,
Chciałbym w WebApi skorzystać z Cache'a aby ograniczyć pobieranie danych z bazy danych.
Założenie jest proste:
- Gdy pobieram dane to najpierw weryfikuję czy są one w Cache'u - jeśli nie to pobieram je z bazy danych i aktualizuję cache.
- Gdy dodaję, usuwam lub modyfikuję dane (add / update / delete) - pobieram dane z Cache'u / DB dodaję do nich nowy obiekt lub modyfikuję już istniejący, następnie kasuję to co jest w cache'u -> dodaję zaktualizowane dane do Cache'a -> aktualizuję DB
Mam jednak kilka wątpliwości:
- Cache nie jest thread safe co oznacza, że zmiany powinny być dokonywane w bloku lock.
- W bloku lock powinna być również uwzględniona zmiana w bazie danych, ale tutaj wykorzystuję słowo kluczowe await a z tego co przeczytałem to nie powinno się używać await w blocku lock.
Moje pytania:
Ad 1: Czy słowo kluczowe lock blokuje mi wszystkie wątki - nawet takie, które nie pracują na zmiennych, które są wykorzystane w bloku lock? - czyli zablokuje mi całe API?
Ad 2: W jaki sposób można połączyć lock w zakresie zmiany w Cache'u z aktualizacją danych w DB, gdy korzystam ze słowa await?