code: private synchronized void evict() {
          for (RedisClient client : clientList) {
              if (!PONG.equals(client.ping())) {
                  if (!client.isAlive()) {
                      logger.debug("ping not get pong and client still not alive, " + client.getLiteralRedisServer());
                      continue;
                  }
                  int failedTimes = evictorFailedTimesCount.get(client).incrementAndGet();
                  logger.warn("failed times: " + failedTimes +
                          ", ping not get pong but client failed times is not more than " +
                          evictorFailedTimesToBeTickOut + ", so client is alive " +
                          client.getLiteralRedisServer());
                  if (failedTimes > evictorFailedTimesToBeTickOut) {
                      logger.error("failed times is bigger than " + evictorFailedTimesToBeTickOut +
                              ", so client tick out, " + client.getLiteralRedisServer());
                      client.setAlive(false);
                  }
              } else {
                  if (evictorFailedTimesCount.get(client).get() == 0) {
                      logger.debug("ping get pong and last ping-pong is ok, " + client.getLiteralRedisServer());
                      continue;
                  }
                  logger
                          .warn("last ping-pong is failed, this is first time to recover, " + client
                                  .getLiteralRedisServer());
                  evictorFailedTimesCount.get(client).set(0);
                  client.setAlive(true);
              }
          }
      }
docs: 失效连接自动剔除/恢复