Tidak ada cara langsung atau mudah untuk melakukannya. Pekerjaan yang tertunda disimpan dalam sorted sets
sebagai waktu yang akan diproses sebagai score
dan muatan pekerjaan sebagai value
.
Ada beberapa cara untuk menghapus elemen dari kumpulan yang diurutkan (kebanyakan memerlukan beberapa upaya tergantung pada ukuran antrian yang tertunda) seperti
- Anda mendapatkan muatan "tepat" dari pekerjaan yang dikirim dan kemudian menggunakan ZREM untuk menghapusnya. Sulit karena objek (versi serial pekerjaan dengan semua parameter) bisa sangat besar dan Anda tidak dapat membuat pekerjaan "tepat" karena memiliki pengidentifikasi unik. Anda bisa mendapatkan daftarnya dengan ZRANGEBYSCORE dan dengan
WITHSCORES
. Ini akan memberi Anda daftar pekerjaan dengan skor mereka. Anda dapat menggunakan skor untuk mengidentifikasi pekerjaan yang tertunda. Dapatkan nilainya (payload serial) lalu gunakanZREM
. - Jika hanya ada satu pekerjaan yang akan diproses pada waktu tertentu Anda, dapat menggunakan ZREMRANGEBYSCORE dengan menggunakan waktu yang diproses. Jika ada n pekerjaan yang harus diproses tepat pada waktu itu, maka pekerjaan lain juga dapat dihapus karena
ZREMRANGEBYSCORE
membutuhkan interval waktu. - Anda dapat mencoba menggunakan ZSCAN untuk memindai seluruh daftar tertunda (dengan pagination) dan menemukan skor dan pengenal pekerjaan, lalu menggunakan ZREMRANGEBYLEX dengan pengenal untuk menghapusnya.
- Cara lain dapat menempatkan kondisi pembatalan di awal
handle
metode. Yang ini membutuhkan pengembangan lapisan aplikasi. Setiap kali Anda memasukkan pekerjaan ke antrian, Anda mengirim pengidentifikasi ke pekerjaan itu, masukkan pengenal yang sama (yang dapat Anda pahami) di Redis juga (denganEXPIRE
lebih besar dari waktu tunda). Ketika Anda ingin membatalkannya, maka hapus dari Redis. Di dalam metode pegangan, periksa apakah pengidentifikasi yang diberikan ada di Redis, jika tidak, kembalikan lebih awal dari blok kode.