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();
}