Không có cách nào trực tiếp hoặc dễ dàng để làm điều đó. Các công việc bị trì hoãn được lưu giữ trong sorted sets
thời gian được xử lý là score
và khối lượng công việc dưới dạng giá trị value
.
Có một số cách để xóa một phần tử khỏi các tập hợp đã sắp xếp (hầu hết chúng đòi hỏi một số nỗ lực tùy thuộc vào kích thước của hàng đợi bị trễ) chẳng hạn như
- Bạn nhận được khối lượng "chính xác" của công việc đã cử đi và sau đó sử dụng ZREM để xóa nó. Thật khó vì đối tượng (phiên bản tuần tự của công việc với tất cả các tham số) có thể rất lớn và bạn không thể tạo công việc "chính xác" vì nó có một mã định danh duy nhất. Bạn có thể lấy danh sách của nó với ZRANGEBYSCORE và với
WITHSCORES
. Nó sẽ cung cấp cho bạn danh sách các công việc với điểm số của họ. Bạn có thể sử dụng điểm số để xác định công việc bị trì hoãn. Nhận giá trị (tải trọng tuần tự) rồi sử dụngZREM
. - Nếu bạn chỉ có một công việc được xử lý tại một thời điểm cụ thể, có thể sử dụng ZREMRANGEBYSCORE với việc sử dụng thời gian đã xử lý. Nếu có n công việc được xử lý chính xác vào thời điểm đó thì các công việc khác cũng có thể bị xóa vì
ZREMRANGEBYSCORE
mất khoảng thời gian. - Bạn có thể thử sử dụng ZSCAN để quét toàn bộ danh sách bị hoãn (có phân trang) và tìm điểm số cũng như số nhận dạng của công việc, sau đó sử dụng ZREMRANGEBYLEX với số nhận dạng để xóa nó.
- Một cách khác có thể là đặt điều kiện hủy ở đầu
handle
phương pháp. Cái này yêu cầu phát triển lớp ứng dụng. Bất cứ khi nào bạn đẩy một công việc vào hàng đợi, bạn gửi một số nhận dạng cho công việc đó, hãy đặt cùng một số nhận dạng (mà bạn có thể hiểu được) vào Redis (vớiEXPIRE
lớn hơn thời gian bị trì hoãn). Khi bạn muốn hủy nó, sau đó xóa nó khỏi Redis. Bên trong phương thức xử lý, hãy kiểm tra xem số nhận dạng đã cho có tồn tại trong Redis hay không, nếu không phải trả về sớm từ khối mã.