private Mono<Void> syncLocalBlocklist() {
        // Don't need to schedule the job to evict expired blocked clients
        // as expired blocked clients always need to be evicted.
        evictLocalExpiredBlockedClients();
        if (node.isLocalNodeLeader()) {
            redisClient.eval(evictExpiredBlockedClients)
                    .subscribe(null,
                            t -> LOGGER.error(
                                    "Caught an error while evicting expired blocked clients",
                                    t));
        }
        ByteBuf localTimestampMillisBuffer = encodeLocalTimestampMillis();
        ByteBuf localLogIdBuffer;
        try {
            localLogIdBuffer = encodeLocalLogId();
        } catch (Exception e) {
            ReferenceCountUtil.safeEnsureReleased(localTimestampMillisBuffer);
            throw e;
        }
        try {
            Mono<List<Object>> getBlocklistLogs = redisClient.eval(getBlocklistLogsScript,
                    getBlocklistKey(),
                    localTimestampMillisBuffer,
                    localLogIdBuffer);
            return getBlocklistLogs.flatMap(elements -> {
                long timestampMillis = (long) elements.getFirst();
                if (timestampMillis < 0) {
                    return Mono.empty();
                }
                if (timestampMillis != localTimestampMillis
                        && localTimestampMillis != UNINITIALIZED_TIMESTAMP) {
                    return resetAndSyncAllBlockedClients();
                }
                int logId = (int) (long) elements.get(1);
                int diff = logId - localLogId;
                if (diff > maxLogQueueSize || diff < 0) {
                    return resetAndSyncAllBlockedClients();
                } else if (diff > 0) {
                    List<BlockClientLog<T>> logs = parseClientLogs(elements);
                    handleBlockClientLogs(logs, diff);
                    localLogId = logId;
                }
                return Mono.empty();
            });
        } catch (Exception e) {
            ReferenceCountUtil.safeEnsureReleased(localTimestampMillisBuffer);
            ReferenceCountUtil.safeEnsureReleased(localLogIdBuffer);
            throw e;
        }
    }
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