用map当缓存的问题,put方法将所有的key的value都更改了

qiutian1990 2018-04-18 08:24:59
 public class MemoryCard {
private static Map<String, AccountCache> caches = new HashMap<String, AccountCache>();

/**
* 存入缓存
* @param key
* @param cache
*/
public void putCache(String key, AccountCache accountCache) {
caches.put(key, accountCache);
}


/**
* 获取对应缓存
* @param key
* @return
*/
public AccountCache getCacheByKey(String key) {
if (caches.containsKey(key)) {
return caches.get(key);
}
return null;
}
}

这是写的缓存类,定时器没过30秒去数据库查询数据,再调用putCache方法,但是测试的时候发现比如有两个map值,
key1的value是value1,key2的value是value2,但是后面getCacheByKey取值的时候,取到key1的value是value1,key2的value是value1,死活找不出原因了
...全文
931 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿闰 2018-04-18
  • 打赏
  • 举报
回复
5楼正解,建议用ConcurrentHashMap
maradona1984 2018-04-18
  • 打赏
  • 举报
回复
HashMap是非线程安全类,从你的描述来看,这个map是多线程可见的对象,自然需要考虑线程安全的问题
诺丽果 2018-04-18
  • 打赏
  • 举报
回复
你在取值的时候做一下判断:
for (String key : caches.keySet()) {
if (key.equals("key1")) {
	String  value1 = caches.get(key1).toString();}
if (key.equals("key2")) {
	String  value2 = caches.get(key2).toString();}
}
自由自在_Yu 2018-04-18
  • 打赏
  • 举报
回复
看一下你的数据库里保存的数据是否正确
  • 打赏
  • 举报
回复

AccountCache ac = getCacheByKey("key1");
putCache("key1", ac);
ac = getCacheByKey("key2");
putCache("key2", ac);
  • 打赏
  • 举报
回复
看看两次调getCacheByKey的时候,是不是用同一个变量接受了。 类似于

AccountCache ac = getCacheByKey("key1");
putCache("key1", ac);
ac = getCacheByKey("key1");
putCache("key2", ac);
梦醉天下 2018-04-18
  • 打赏
  • 举报
回复
2楼说的估计是问题原因

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧