private List<BlockedClient<T>> parseBlockedClients(List<Object> elements) {
        if (elements.size() <= 2) {
            return Collections.emptyList();
        }
        elements = (List<Object>) elements.get(2);

        int elementCount = elements.size();
        List<BlockedClient<T>> clients = new ArrayList<>(elementCount / 2);
        for (int i = 0; i < elementCount; i += 2) {
            T clientId = decodeClientId((ByteBuf) elements.get(i));
            long blockEndTimeMillis = decodeBlockEndTime((long) elements.get(i + 1));
            clients.add(new BlockedClient<>(clientId, blockEndTimeMillis));
        }
        return clients;
    }
Used to remove the local expired blocked clients quickly, even if there are a lot of blocked
clients so that we can run eviction more frequently.

@implNote It is acceptable to store the same IP or the user ID with different block times in
          the skip list because it is how the skip list works.
turms-server-common/src/main/java/im/turms/server/common/domain/blocklist/manager/BlocklistServiceManager.java