大家应该知道,用户从发起请求,到服务器响应的这个过程中,在服务器中是在一个线程中的。如果我们吧查询出来的对象放到这个线程自己的缓存中,到用户请求结束时,把这些东西清理掉,应该是一个不错的cache方案。
import java.util.HashMap;
import java.util.Map; /**
* ThreadLocalCache
*
*/
public class ThreadLocalCache { /**
* 实例字段,每个线程一个store,每个线程生产一个{@code ThreadLocalCache} INSTANCE
*/
private final ThreadLocal<Map<Object, Object>> store; public ThreadLocalCache() {
this.store = new ThreadLocal<Map<Object, Object>>() {
@Override
protected Map<Object, Object> initialValue() {
return new HashMap<Object, Object>();
}
};
} public void put(Object key, Object value) {
store.get().put(key, value);
} public Object get(Object key) {
return store.get().get(key);
}
}