public function cleanup()
    {
        $hosts   = $this->redis->smembers(self::redisKey());
        $workers = $this->redis->smembers(Worker::redisKey());
        $cleaned = array('hosts' => array(), 'workers' => array());

        foreach ($hosts as $hostname) {
            $host = new static($hostname);

            if (!$this->redis->exists(self::redisKey($host))) {
                $this->redis->srem(self::redisKey(), (string)$host);
                $cleaned['hosts'][] = (string)$host;
            } else {
                $host_workers = $this->redis->smembers(self::redisKey($host));

                foreach ($host_workers as $host_worker) {
                    if (!in_array($host_worker, $workers)) {
                        $cleaned['workers'][] = $host_worker;

                        $this->redis->srem(self::redisKey($host), $host_worker);
                    }
                }
            }
        }

        return $cleaned;
    }