Reids Hash类型存取List

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;
}
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值