All Downloads are FREE. Search and download functionalities are using the official Maven repository.

win.doyto.query.cache.CacheUtil Maven / Gradle / Ivy

There is a newer version: 2.0.0
Show newest version
// Generated by delombok at Wed Nov 06 09:48:14 UTC 2024
/*
 * Copyright © 2019-2024 Forb Yuan
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package win.doyto.query.cache;

import org.springframework.cache.Cache;
import org.springframework.cache.support.NoOpCache;
import java.util.concurrent.*;

/**
 * CacheUtil
 *
 * @author f0rb on 2020-05-16
 */
class CacheUtil {
    @java.lang.SuppressWarnings("all")
    @lombok.Generated
    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(CacheUtil.class);
    private static final int MAXIMUM_POOL_SIZE = 4;
    private static final ExecutorService executorService = new ThreadPoolExecutor(Math.min(Runtime.getRuntime().availableProcessors() / 4 + 1, MAXIMUM_POOL_SIZE), MAXIMUM_POOL_SIZE, 1, TimeUnit.MINUTES, new SynchronousQueue<>(), new RenameThreadFactory(), new ThreadPoolExecutor.DiscardOldestPolicy());
    public static final Cache noOpCache = new NoOpCache("noop");

    @SuppressWarnings("unchecked")
    public static  V invoke(Cache cache, Object key, CacheInvoker cacheInvoker) {
        if (cache instanceof NoOpCache || key == null) {
            return cacheInvoker.invoke();
        }
        try {
            Cache.ValueWrapper valueWrapper = cache.get(key);
            if (valueWrapper != null) {
                return (V) valueWrapper.get();
            }
        } catch (Exception e) {
            log.error(String.format("Cache#get failed: [cache=%s, key=%s]", cache.getName(), key), e);
        }
        V value = cacheInvoker.invoke();
        executorService.execute(() -> cache.put(key, value));
        return value;
    }


    private static class RenameThreadFactory implements ThreadFactory {
        private final ThreadFactory delegate = Executors.defaultThreadFactory();

        public Thread newThread(Runnable r) {
            Thread thread = delegate.newThread(r);
            String threadName = thread.getName();
            thread.setName("doyto-cache" + threadName.substring(threadName.lastIndexOf('-')));
            return thread;
        }
    }

    @java.lang.SuppressWarnings("all")
    @lombok.Generated
    private CacheUtil() {
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy