@Slf4j
@Service
public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements DictService {
@Transactional(rollbackFor = {Exception.class})
@Override
public void importData(InputStream inputStream) {
EasyExcel.read(inputStream, ExcelDictDTO.class, new ExcelDictDTOListener(baseMapper)).sheet().doRead();
log.info("Excel导入成功");
}
@Override
public List<ExcelDictDTO> listDictData() {
List<Dict> dictList = baseMapper.selectList(null);
//创建ExcelDictDTO列表,将Dict列表转换成ExcelDictDTO列表
ArrayList<ExcelDictDTO> excelDictDTOList = new ArrayList<>(dictList.size());
dictList.forEach(dict -> {
ExcelDictDTO excelDictDTO = new ExcelDictDTO();
BeanUtils.copyProperties(dict, excelDictDTO);
excelDictDTOList.add(excelDictDTO);
});
return excelDictDTOList;
}
@Override
public List<Dict> listByParentId(Long parentId) {
log.info("从MySQL数据库中获取数据列表");
QueryWrapper<Dict> dictQueryWrapper = new QueryWrapper<>();
dictQueryWrapper.eq("parent_id", parentId);
List<Dict> dictList = baseMapper.selectList(dictQueryWrapper);
//返回数据列表
return dictList;
}
}
图上代码运行
从mysql数据库中获取列表

正确返回到前端页面

引入redis
在直接从MySQL数据库获取列表前写入代码try..catch代码段
try {
//首先查询redis中是否存在数据列表
List<Dict> dictList = (List<Dict>)redisTemplate.opsForValue().get("srb:core:dictList:" + parentId);
if(dictList != null){
//如果存在则从redis中直接返回数据列表
log.info("从redis中获取数据列表");
return dictList;
}
} catch (Exception e) {
log.error("redis服务器异常:" + ExceptionUtils.getStackTrace(e));
}
完整代码
@Slf4j
@Service
public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements DictService {
@Resource
private RedisTemplate redisTemplate;
@Transactional(rollbackFor = {Exception.class})
@Override
public void importData(InputStream inputStream) {
EasyExcel.read(inputStream, ExcelDictDTO.class, new ExcelDictDTOListener(baseMapper)).sheet().doRead();
log.info("Excel导入成功");
}
@Override
public List<ExcelDictDTO> listDictData() {
List<Dict> dictList = baseMapper.selectList(null);
//创建ExcelDictDTO列表,将Dict列表转换成ExcelDictDTO列表
ArrayList<ExcelDictDTO> excelDictDTOList = new ArrayList<>(dictList.size());
dictList.forEach(dict -> {
ExcelDictDTO excelDictDTO = new ExcelDictDTO();
BeanUtils.copyProperties(dict, excelDictDTO);
excelDictDTOList.add(excelDictDTO);
});
return excelDictDTOList;
}
@Override
public List<Dict> listByParentId(Long parentId) {
//引入redis
try {
//首先查询redis中是否存在数据列表
List<Dict> dictList = (List<Dict>)redisTemplate.opsForValue().get("srb:core:dictList:" + parentId);
if(dictList != null){
//如果存在则从redis中直接返回数据列表
log.info("从redis中获取数据列表");
return dictList;
}
} catch (Exception e) {
log.error("redis服务器异常:" + ExceptionUtils.getStackTrace(e));
}
//如果不存在则查询MySQL数据库
log.info("从数据库中获取数据列表");
QueryWrapper<Dict> dictQueryWrapper = new QueryWrapper<>();
dictQueryWrapper.eq("parent_id", parentId);
List<Dict> dictList = baseMapper.selectList(dictQueryWrapper);
//返回数据列表
return dictList;
}
}
在redis连接状态下无任何异常
控制台获取到列表,返回前端页面
但我最大疑问是断开redis,控制台也是能获取到列表但就是无法返回前端页面


前端页面

请问要怎样引入redis即使断开连接情况下前端网页不受影响。redis能用就用,不能用直接从MySQL取
本人刚接触不久,还望各位耐心指点迷津