Det tidigare skrivna zk-baserade distribuerade låset är följande:
Redis implementerar principen om distribuerad låsning:
Principen för att implementera distribuerade lås i Redis är att anropa SETNX-kommandot redis, och om nyckeln redan finns gör SETNX-kommandot ingenting. Kommandot returnerar 1 när inställningen lyckas och 0 när inställningen misslyckas.
Först simulerar vår webbplats 10 000 produkter och skriver sedan en konsol som simulerar HTTP-förfrågan, vilket tar 40 sekunder att slutföra köpet, renderingen är följande:
Skapa en ny webbplats ASP.NET Core 3.1, och redis lock-paketet är följande:
Jag såg att många release-lås på internet är skrivna så här:
Det känns dock som att det kan finnas ett problem, i fallet med samtidighet är det möjligt att returnera true vid domstillfället, det är faktiskt ett lås som lagts till av sig självt, men när låset tas bort kan det finnas iI extrema fall, har låset erhållits av en annan tråd, ifall någon annans lås raderas.
Därför behöver du öppna en tråd när du skaffar ett lås för att förlänga låsets utgångstid.
WeatherForecastController-gränssnittet är följande:
Du kan starta API:s webbplats via kommandoraden, som enkelt kan startas om, enligt följande:
Skapa en ny .NET Core-mockup HTTP-förfrågan för snap-köp, koden är följande:
Om det är något fel, tack för att du rättade till det.
Slutligen, bifoga källkoden:
Turister, om ni vill se det dolda innehållet i detta inlägg, snälla Svar
|