code: func (c *Client) RetryDeadJob(diedAt int64, jobID string) error {
  	// Get queues for job names
  	queues, err := c.Queues()
  	if err != nil {
  		logError("client.retry_all_dead_jobs.queues", err)
  		return err
  	}
  
  	// Extract job names
  	var jobNames []string
  	for _, q := range queues {
  		jobNames = append(jobNames, q.JobName)
  	}
  
  	script := redis.NewScript(len(jobNames)+1, redisLuaRequeueSingleDeadCmd)
  
  	args := make([]interface{}, 0, len(jobNames)+1+3)
  	args = append(args, redisKeyDead(c.namespace)) // KEY[1]
  	for _, jobName := range jobNames {
  		args = append(args, redisKeyJobs(c.namespace, jobName)) // KEY[2, 3, ...]
  	}
  	args = append(args, redisKeyJobsPrefix(c.namespace)) // ARGV[1]
  	args = append(args, nowEpochSeconds())
  	args = append(args, diedAt)
  	args = append(args, jobID)
  
  	conn := c.pool.Get()
  	defer conn.Close()
  
  	cnt, err := redis.Int64(script.Do(conn, args...))
  	if err != nil {
  		logError("client.retry_dead_job.do", err)
  		return err
  	}
  
  	if cnt == 0 {
  		return ErrNotRetried
  	}
  
  	return nil
  }
docs: // RetryDeadJob retries a dead job. The job will be re-queued on the normal work queue for eventual processing by a worker.