Szukasz nazwanych blokad (ostrożne, niebezpieczne rzeczy, nie próbuj eksperymentować z blokadami na serwerach produkcyjnych :D).
Spójrz na:
A1 :Wybierz unikalny ciąg do zablokowania i użyj GET_LOCK
na nim (powiedz, GET_LOCK('conversation_' || [id])
; jeśli zwraca 1
zamek jest twój. Rób, co chcesz, a później zadzwoń do RELEASE_LOCK
(uwzględniając wszystkie możliwe scenariusze, w tym błędy).
A2 :Drugi parametr GET_LOCK
to limit czasu w sekundach . Jeśli operacja przekroczy limit czasu GET_LOCK
zwróci 0
.
Z oficjalnej dokumentacji
Pogrubienia są moje:
- Oznacza, że możesz trzymać tylko jedną blokadę na połączenie (nie jest to problem dla twojego przypadku użytkownika)
- Oznacza, że blokady zostaną zwolnione po zamknięciu połączenie
- Oznacza, że dwa różne połączenia (nawet z tej samej puli) mogą nie uzyskać tego samego wyglądu jednocześnie.