第一步: 事先我们已经将itemCat表中的数据放入了solr中,所以这里可以直接使用solr的分组查询,查询商品分类数据
第二步: 将商品分类表全部缓存进redis数据库中
缓存的形式是map类型 大key=itemcat 小key=name value=type_id 思路还是一样先从mysql数据库查出来,然后存入redis数据库中
List<TbItemCat> list = findAll(); //mysql查出来
for(TbItemCat itemCat:list){ //redis存进去
redisTemplate.boundHashOps("itemCat").put(itemCat.getName(), itemCat.getTypeId());
}
@Autowired
private RedisTemplate redisTemplate;
/**
* 根据上级ID查询列表
*/
@Override
public List<TbItemCat> findByParentId(Long parentId) {
TbItemCatExample example1=new TbItemCatExample();
Criteria criteria1 = example1.createCriteria();
criteria1.andParentIdEqualTo(parentId);
//每次执行查询的时候,一次性读取缓存进行存储 (因为每次增删改都要执行此方法)
List<TbItemCat> list = findAll();
for(TbItemCat itemCat:list){
redisTemplate.boundHashOps("itemCat").put(itemCat.getName(), itemCat.getTypeId());
}
System.out.println("更新缓存:商品分类表");
return itemCatMapper.selectByExample(example1);
}
第三步: 缓存品牌数据和规格数据(第三列规格,第四列品牌)
第三列,第四列都是数组,需要先将数组转换成List<Map>类型,这样便于放入redis数据库中
存储形式是 大key =brandList 小key=id(type_id) value=brandIds是一个List<Map> 类型的
redisTemplate.boundHashOps("brandList").put(typeTemplate.getId(), brandList);
List<Map> specList = findSpecList(typeTemplate.getId()); 这里面封装了规格和规格选项的内容,跟brandList一样,也需要封装让如redis缓存中
@Autowired
private RedisTemplate redisTemplate;
/**
* 将数据存入缓存
*/
private void saveToRedis(){
//获取模板数据
List<TbTypeTemplate> typeTemplateList = findAll();
//循环模板
for(TbTypeTemplate typeTemplate :typeTemplateList){
//存储品牌列表
List<Map> brandList = JSON.parseArray(typeTemplate.getBrandIds(), Map.class);
redisTemplate.boundHashOps("brandList").put(typeTemplate.getId(), brandList);
//存储规格列表
List<Map> specList = findSpecList(typeTemplate.getId());//根据模板ID查询规格列表
redisTemplate.boundHashOps("specList").put(typeTemplate.getId(), specList);
}
}
然后只要运营商页面执行后,就可以将相关数据放入redis数据库中.
第四步:显示品牌和规格数据
itemcat brandList和 speList 数据现在已经全部都在redis中了
现在整个思路就是根据 关键字Keywords------->查询到商品分类名称----------->查询到模板id-------->查询到品牌列表 和 规格列表
@Autowired
private RedisTemplate redisTemplate;
/**
* 查询品牌和规格列表
* @param category 分类名称
* @return
*/
private Map searchBrandAndSpecList(String category){
Map map=new HashMap();
Long typeId = (Long) redisTemplate.boundHashOps("itemCat").get(category);//获取模板ID
if(typeId!=null){
//根据模板ID查询品牌列表
List brandList = (List) redisTemplate.boundHashOps("brandList").get(typeId);
map.put("brandList", brandList);//返回值添加品牌列表
//根据模板ID查询规格列表
List specList = (List) redisTemplate.boundHashOps("specList").get(typeId);
map.put("specList", specList);
}
return map;
}