当前位置: 代码迷 >> J2EE >> 缓存,该如何处理
  详细解决方案

缓存,该如何处理

热度:521   发布时间:2016-04-17 23:21:44.0
缓存
现在有这样一个需求,一个界面中有一个LIST列表,列表可以编辑(增删改),界面保存的时候同时保存列表中信息,因为要同步,所以把列表的信息缓存到后台,代码如下:
public class Cache {

private static final ThreadLocal<Hashtable<Long, Object>> users = new ThreadLocal<Hashtable<Long, Object>>();

public synchronized static Hashtable<Long, Object> getUsers() {
Hashtable<Long, Object> useres = (Hashtable<Long, Object>) users.get();
if (null == useres) {
useres = new Hashtable<Long, Object>();
users.set(useres);
}
return useres;
}

public synchronized static void clearUsers() {
users.remove();
}
}

现在的问题是,不知道每次页面的请求(列表信息修改)难道不是一个线程?getUsers偶尔会出现useres为NULL,然后就会创建一个新的Hashtable,以前保存在里面的数据都没有了,请教高手是什么原因,拜谢了,分少,见谅。
------解决思路----------------------
每次请求是一个线程,但是从发起请求开始到返回页面,这个线程就结束了
------解决思路----------------------
看开源的ehcache框架,跟spring整合得很好,配置后直接调API读取和操作缓存数据,支持跟后台数据库集成
------解决思路----------------------
难道多个请求之间的LIST列表不需要同步吗
------解决思路----------------------
缓存本身就是整个系统共享的整个系统就占一份没必要用线程池     static?final 静态的常量本身就是无状态的
------解决思路----------------------
如果你数据量比较大的话,可以考虑使用ehcache,很容易就能搞定,把它全部缓存在ehcache中就成,跟hashmap的用法比较类似。
  相关解决方案