sql >> Database >  >> NoSQL >> Redis

Annuleer banen in Laravel

Er is geen directe of gemakkelijke manier om het te doen. De uitgestelde taken worden bewaard in sorted sets als te verwerken tijd als score en taaklading als de value .

Er zijn verschillende manieren om een ​​element uit de gesorteerde sets te verwijderen (de meeste vereisen enige inspanning, afhankelijk van de grootte van de vertraagde wachtrij), zoals

  • U krijgt de "exacte" lading van de verzonden taak en gebruikt vervolgens ZREM om deze te verwijderen. Het is moeilijk omdat het object (geserialiseerde versie van de taak met alle parameters) enorm kan zijn en u de "exacte" taak niet kunt maken omdat deze een unieke identificatie heeft. Je kunt de lijst ervan krijgen met ZRANGEBYSCORE en met WITHSCORES . Het geeft je de lijst met banen met hun scores. U kunt de score gebruiken om een ​​vertraagde taak te identificeren. Verkrijg de waarde (geserialiseerde payload) en gebruik vervolgens ZREM .
  • Als er slechts één taak op een bepaald tijdstip moet worden verwerkt, kunt u ZREMRANGEBYSCORE gebruiken met de verwerkingstijd. Als er precies op dat moment n taken zijn die moeten worden verwerkt, kunnen ook andere taken worden verwijderd sinds ZREMRANGEBYSCORE kost tijdsinterval.
  • U kunt proberen ZSCAN te gebruiken om de hele vertraagde lijst (met paginering) te scannen en de score en identifier van de taak te vinden, en dan ZREMRANGEBYLEX gebruiken met de identifier om deze te verwijderen.
  • Een andere manier zou kunnen zijn om een ​​annuleringsvoorwaarde aan het begin van handle te plaatsen methode. Deze vereist ontwikkeling van de applicatielaag. Telkens wanneer u een taak naar de wachtrij duwt, stuurt u een identifier naar de taak, plaats dezelfde identifier (die u begrijpt) ook in Redis (met EXPIRE groter is dan de vertraagde tijd). Als je het wilt annuleren, verwijder het dan uit de Redis. Controleer in de handle-methode of de gegeven identifier bestaat in Redis, zo niet vroege terugkeer uit het codeblok.



  1. Redis configureren om consequent oudere gegevens eerst te verwijderen

  2. Ruimtevereisten voor Redis-gegevensstructuur

  3. Ondertekend 64-bits nummer vergelijken met 32-bits bitsgewijze bewerkingen in Lua

  4. NestJS:hoe u op sessies gebaseerde gebruikersauthenticatie implementeert