1,在往redis存值时,List定义类型,他存进去就是list + 对象类型
List<Student> list= 查询结果集合
存进去后redis显示一个结果
[java.util.List,[com.xx.xx.Student,{name:'123'}],[com.xx.xx.Student,{name:'123'}],[com.xx.xx.Student,{name:'123'}]]
取值要list.get(0), 才是你要的list
List list= 查询结果集合
[com.xx.xx.Student,{name:'123'}],[com.xx.xx.Student,{name:'123'}],[com.xx.xx.Student,{name:'123'}]
这样直接是list
2, 在主线下启动一个子线程A, 子线程A中调用的bean,要么new出来,要么传进来,不让回报空指针
主线程
storeManagerService.isAfterSale(storeManager, getUserInfo());
sysPermissionService.startTheardFlashRedis();
@Override
public void startTheardFlashRedis() {
AfterSaleManagerServiceImpl afterSaleManagerService = new AfterSaleManagerServiceImpl();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
redisUtil.del(RedisKeyConstant.STORE_ALL_TREE);
redisUtil.hmset(RedisKeyConstant.STORE_ALL_TREE, afterSaleManagerService.getAllStoreTree());
}
});
thread.start();
}
//下面会有空指针异常,redisUtil 和主线程中redisUtil 不是一个
@Override
public synchronized Map getAllStoreTree() {
Map resMap=redisUtil.hmget(RedisKeyConstant.STORE_ALL_TREE);
if (resMap.size() == 0) {
redisUtil.hmset(RedisKeyConstant.STORE_ALL_TREE,resMap);
}
return list;
}
//处理办法 ,getAllStoreTree重新方法,把redis传过去
@Override
public void startTheardFlashRedis() {
SysPermissionServiceImpl sysPermissionService = new SysPermissionServiceImpl();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
redisUtil.del((RedisKeyConstant.STORE_ALL_TREE);
redisUtil.hmset(RedisKeyConstant.STORE_ALL_TREE, afterSaleManagerService.getAllStoreTree(redisUtil));
}
});
thread.start();
}