Det finns inget direkt eller enkelt sätt att göra det på. De försenade jobben sparas i sorted sets lika bearbetningstid som score och jobbnyttolast som value .
Det finns flera sätt att ta bort ett element från de sorterade uppsättningarna (de flesta av dem kräver vissa ansträngningar beroende på storleken på den försenade kön) som t.ex.
- Du får den "exakta" nyttolasten för det skickade jobbet och använder sedan ZREM för att ta bort det. Det är svårt eftersom objektet (serialiserad version av jobbet med alla parametrar) kan vara enormt och du kan inte skapa det "exakta" jobbet eftersom det har en unik identifierare. Du kan få listan över det med ZRANGEBYSCORE och med
WITHSCORES. Det kommer att ge dig en lista över jobb med deras poäng. Du kan använda poäng för att identifiera ett försenat jobb. Hämta värdet (serialiserad nyttolast) och använd sedanZREM. - Om det bara finns ett jobb som ska bearbetas vid en viss tidpunkt kan du använda ZREMRANGEBYSCORE med att använda den bearbetade tiden. Om det finns n jobb som ska behandlas exakt den tiden kan andra jobb också tas bort eftersom
ZREMRANGEBYSCOREtar tidsintervall. - Du kan försöka använda ZSCAN för att skanna hela den fördröjda listan (med sidnumrering) och hitta poängen och identifieraren för jobbet, och sedan använda ZREMRANGEBYLEX med identifieraren för att ta bort det.
- Ett annat sätt kan vara att sätta ett avbokningsvillkor i början av
handlemetod. Den här kräver utveckling av applikationslager. När du skickar ett jobb till kön skickar du en identifierare till jobbet, lägg in samma identifierare (som du kan förstå) i Redis också (medEXPIRElängre än den fördröjda tiden). När du vill avbryta det, radera det från Redis. Inuti handtagsmetoden kontrollera om den givna identifieraren finns i Redis, om inte tidig retur från kodblocket.