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

com.alicp.jetcache.CacheUtil Maven / Gradle / Ivy

The newest version!
package com.alicp.jetcache;

import com.alicp.jetcache.event.CacheEvent;
import com.alicp.jetcache.event.CacheLoadAllEvent;
import com.alicp.jetcache.event.CacheLoadEvent;

import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Function;

/**
 * Created on 2017/5/22.
 *
 * @author huangli
 */
public class CacheUtil {

    private interface ProxyLoader extends CacheLoader {
    }

    public static  ProxyLoader createProxyLoader(Cache cache,
                                                             CacheLoader loader,
                                                             Consumer eventConsumer) {
        if (loader instanceof ProxyLoader) {
            return (ProxyLoader) loader;
        }
        return new ProxyLoader() {
            @Override
            public V load(K key) throws Throwable {
                long t = System.currentTimeMillis();
                V v = null;
                boolean success = false;
                try {
                    v = loader.load(key);
                    success = true;
                } finally {
                    t = System.currentTimeMillis() - t;
                    CacheLoadEvent event = new CacheLoadEvent(cache, t, key, v, success);
                    eventConsumer.accept(event);
                }
                return v;
            }

            @Override
            public Map loadAll(Set keys) throws Throwable {
                long t = System.currentTimeMillis();
                boolean success = false;
                Map kvMap = null;
                try {
                    kvMap = loader.loadAll(keys);
                    success = true;
                } finally {
                    t = System.currentTimeMillis() - t;
                    CacheLoadAllEvent event = new CacheLoadAllEvent(cache, t, keys, kvMap, success);
                    eventConsumer.accept(event);
                }
                return kvMap;
            }

            @Override
            public boolean vetoCacheUpdate() {
                return loader.vetoCacheUpdate();
            }
        };
    }

    public static  ProxyLoader createProxyLoader(Cache cache,
                                                          Function loader,
                                                          Consumer eventConsumer) {
        if (loader instanceof ProxyLoader) {
            return (ProxyLoader) loader;
        }
        if (loader instanceof CacheLoader) {
            return createProxyLoader(cache, (CacheLoader) loader, eventConsumer);
        }
        return k -> {
            long t = System.currentTimeMillis();
            V v = null;
            boolean success = false;
            try {
                v = loader.apply(k);
                success = true;
            } finally {
                t = System.currentTimeMillis() - t;
                CacheLoadEvent event = new CacheLoadEvent(cache, t, k, v, success);
                eventConsumer.accept(event);
            }
            return v;
        };
    }


    public static  AbstractCache getAbstractCache(Cache c) {
        while (c instanceof ProxyCache) {
            c = ((ProxyCache) c).getTargetCache();
        }
        return (AbstractCache) c;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy