Reids Hash类型存取List
业务:如果购物车中有相同的数据则数量和价格增加没有的话就将新增的数据存储到redis中
1.
2.
3.若购物车没有该商品则新增一条新的商品到购物车内
如果购物车中有相同的数据则数量和价格增加
@Override
public void getByShoppingCart(Integer goodsId,Integer number, HttpSession session) {
Goods goods = goodsDao.selectById(goodsId);
System.out.println(goods);
Store store = storeDao.selectById(goods.getGoodStoreId());
Shopping shopping = new Shopping();
shopping.setShoppingId(goods.getGoodsId());
shopping.setShoppingGoodsName(goods.getGoodsName());
shopping.setShoppingStoreName(store.getStoreName());
shopping.setShoppingGoodsImg(goods.getGoodsImg());
shopping.setShoppingGoodsPrice(goods.getGoodsPrice());
shopping.setShoppingCount(number);
shopping.setShoppingSumPrice(goods.getGoodsPrice()*number);
//以上内容不用看根据自己的数据来写
User login = (User) session.getAttribute("login");
String bigKey = "shopping"+login.getUserId();//拿登录用户Id作为大Key
String smallKey = "shopping"+goods.getGoodsId();//商品Id作为小Key
Boolean key = redisTemplate.opsForHash().hasKey(bigKey, smallKey);
Set keys = redisTemplate.opsForHash().keys(bigKey); //获取所有小key
if (key){ //判断Key是否存在
keys.forEach(a->{//循环所有的小key
if (a.equals(smallKey)){//判断某个key是否存在
List<Object> o = (List<Object>) redisTemplate.opsForHash().get(bigKey, smallKey); //集合[1(对象),2(对象)]
List<Shopping> shoppings = JSONArray.parseArray(JSONArray.toJSONString(o), Shopping.class); //将redis数据转换为json格式
shoppings.forEach(b->{
b.setShoppingCount(b.getShoppingCount()+number); //相同的数据则在原有数据的基础上相加
b.setShoppingSumPrice(b.getShoppingGoodsPrice()*b.getShoppingCount());
});
redisTemplate.opsForHash().put(bigKey,smallKey,shoppings);//覆盖原有的数据
}
});
}else {
//若该数据不存在则新增一个新的
List<Shopping> list2 = new ArrayList<>();
list2.add(shopping);
redisTemplate.opsForHash().put(bigKey,smallKey,list2);
}
}
取出来查询
@Override
public List<Shopping> getByShoppingPages(HttpSession session) {
User login = (User) session.getAttribute("login");
String bigKey = "shopping"+login.getUserId();
List<Object> values = redisTemplate.opsForHash().values(bigKey); //取大key里的所有小key里的值
List<Shopping> result = new ArrayList<Shopping>();
for (Object value : values) { //循环小Key的值 此时小key中的值是集合[对象1,对象2]
List<Shopping> shoppings = JSONArray.parseArray(JSONArray.toJSONString(value), Shopping.class); //将redis数据转换为json格式
for (Shopping shopping : shoppings) {
result.add(shopping);
}
}
return result;
}