@@ -153,7 +153,7 @@ func (d *Database) RemoveCommandFromQueue(commandID int) error {
|
||||
pipe.ZRem(RedisCtx, "queue:priority:sorted", commandIDStr)
|
||||
|
||||
// Trouver et retirer de la queue du livreur
|
||||
keys, _ := Redis.Keys(RedisCtx, "queue:deliveryman:*").Result()
|
||||
keys, _ := scanRedisKeys("queue:deliveryman:*")
|
||||
var affectedDeliveryman string
|
||||
|
||||
for _, queueKey := range keys {
|
||||
@@ -303,7 +303,7 @@ func (d *Database) SyncAllDeliverymanStatuses() error {
|
||||
|
||||
// iterDeliveryStatuses itère sur tous les statuts Redis des livreurs et appelle fn pour chacun.
|
||||
func (d *Database) iterDeliveryStatuses(fn func(models.DeliveryPersonStatus)) error {
|
||||
keys, err := Redis.Keys(RedisCtx, "delivery:status:*").Result()
|
||||
keys, err := scanRedisKeys("delivery:status:*")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -320,3 +320,21 @@ func (d *Database) iterDeliveryStatuses(fn func(models.DeliveryPersonStatus)) er
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// scanRedisKeys remplace KEYS * par SCAN pour ne pas bloquer Redis.
|
||||
func scanRedisKeys(pattern string) ([]string, error) {
|
||||
var all []string
|
||||
cursor := uint64(0)
|
||||
for {
|
||||
batch, next, err := Redis.Scan(RedisCtx, cursor, pattern, 200).Result()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
all = append(all, batch...)
|
||||
cursor = next
|
||||
if cursor == 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
return all, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user