zoukankan      html  css  js  c++  java
  • 本地缓存设计

    被问到本地缓存设计,有点蒙,事后反应过来,何必一个Map呢,两个就可以解决了。真是当时脑子短路了。

    package cache;

    import java.util.Map;
    import java.util.concurrent.ConcurrentHashMap;

    public class MyCache<K, V> {

    private static class ValueObject<T> {

    private T value;
    private long timeout;

    private ValueObject(T value, long timeout) {
    super();
    this.value = value;
    this.timeout = timeout;
    }

    private T getValue() {
    return value;
    }

    private long getTimeout() {
    return timeout;
    }

    }

    public static final Map<Object, ValueObject> localCache = new ConcurrentHashMap<Object, ValueObject>();

    public static Object set(Object key, ValueObject value, long timeout) {
    long currentTime = System.currentTimeMillis();
    ValueObject valueObject = localCache.get(key);
    if (localCache.keySet().contains(key)
    && (valueObject.getTimeout() == 0 || currentTime <= valueObject.getTimeout())) {
    return valueObject.getValue();
    } else {
    ValueObject oldValueObject = localCache.put(key, new ValueObject(value, currentTime + timeout));
    return oldValueObject == null ? null : oldValueObject.getValue();
    }
    }

    public static <T> T set(Object key, ValueObject value) {
    ValueObject oldValueObject = localCache.put(key, new ValueObject(value, 0));
    return (T) (oldValueObject == null ? null : oldValueObject.getValue());
    }

    public static <T> T get(Object key) {
    long currentTime = System.currentTimeMillis();
    ValueObject valueObject = localCache.get(key);
    if (valueObject == null) {
    return null;
    }
    if (valueObject.getTimeout() == 0 || currentTime <= valueObject.getTimeout()) {
    return (T) valueObject.getValue();
    } else {
    localCache.remove(key);
    return null;
    }
    }

    }

    思路清晰了,就好写了,借鉴了下别人的思路,有错误欢迎指出。

  • 相关阅读:
    在一台服务器上搭建相对高可用HiveServer实践
    HDU 4462 Scaring the Birds (暴力求解,二进制法)
    HDU 4461 The Power of Xiangqi (水题)
    HDU 4460 Friend Chains (BFS,最长路径)
    UVaLive 7270 Osu! Master (统计)
    CodeForces 705C Thor (模拟+STL)
    CodeForces 705B Spider Man (水题)
    CodeForces 705A Hulk (水题)
    UVa 11971 Polygon (数学,转化)
    UVa 10900 So you want to be a 2n-aire? (概率DP,数学)
  • 原文地址:https://www.cnblogs.com/anyehome/p/8858848.html
Copyright © 2011-2022 走看看