使用redis的hash 实现简单的购物车功能

step1 我们的知道redis l里面存储的数据结构在这里插入图片描述

step2 我们先知道redis 对于hash 的常用api
在这里插入图片描述
step 3
在这里插入图片描述

// 跟着上面实现一个简单的购物车
package com.shopCar.controller;

import com.shopCar.search.ShopCarSearch;
import com.shopCar.service.ShopCarService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
public class ShopCarController {
    
    
    @Autowired
    ShopCarService shopCarService;

    // 购物车新增物品
    @PostMapping("/add")
    public boolean add(@RequestBody ShopCarSearch search) {
    
    
        return shopCarService.add(search.getUsername(), search.getGoodsId(), search.getNums());
    }

    // 购物车 添加商品的个数
    @PostMapping("/addCount")
    public boolean addCount(@RequestBody ShopCarSearch search) {
    
    
        return shopCarService.addCount(search.getUsername(), search.getGoodsId(), search.getNums());
    }

    // 查看用户购物车有多少商品
    @PostMapping("/selectTotalCountByUser")
    public int selectTotalCountByUser(@RequestBody ShopCarSearch search) {
    
    

        return shopCarService.selectTotalCountByUser(search.getUsername());
    }

    ;

    // 删除商品
    @PostMapping("/deleteGoodsByGoodsId")
    public boolean deleteGoodsByGoodsId(@RequestBody ShopCarSearch search) {
    
    

        return shopCarService.deleteGoodsByGoodsId(search.getUsername(), search.getGoodsId());
    }

    // 查看所有的商品
    @PostMapping("/selectTotalGoods")
    public Map selectTotalGoods(@RequestBody ShopCarSearch search) {
    
    
        ;
        return shopCarService.selectTotalGoods(search.getUsername());
    }
}

package com.shopCar.service;

import java.util.Map;

public interface ShopCarService {
    
    
    //  向购物车中添加商品
    boolean add(String username, String goodsId, String nums);
   //  向购物车中增加该商品的数量
    boolean addCount(String username, String goodsId, String nums);
    // 减-对应商品进行-1 操作
    int decrGoodsCount(String username, String goodsId);
    //  查看商品的总数
    int selectTotalCountByUser(String username);
    // 购物车中删除商品
    boolean deleteGoodsByGoodsId(String username, String goodsId);
    // 获取所有商品
   Map selectTotalGoods(String username);


}


@Service
@Slf4j
public class ShopCarServiceImpl implements ShopCarService {
    
    

    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    public boolean add(String username, String goodsId, String nums) {
    
    
        redisTemplate.opsForHash().put(username, goodsId, nums);
        return true;
    }

    @Override
    public boolean addCount(String username, String goodsId, String nums) {
    
    

        Long count = redisTemplate.opsForHash().lengthOfValue(username, goodsId);
        if (count <1 ) {
    
    
            log.info("您还没有存入该商品,请先添加");
            return false;
        }
        redisTemplate.opsForHash().increment(username, goodsId, Long.parseLong(nums));
        return true;
    }

    @Override
    public int decrGoodsCount(String username, String goodsId) {
    
    
        Long count = redisTemplate.opsForHash().lengthOfValue(username, goodsId);
        //  判断是否为0 
        if (count < 1) {
    
    
            log.info("您还没有存入该商品,请先添加");
            return 0;
        }
        redisTemplate.opsForHash().increment(username, goodsId, -1);
        return count.intValue() - 1;
    }

    @Override
    public int selectTotalCountByUser(String username) {
    
    
        Long size = redisTemplate.opsForHash().size(username);

        return size.intValue();
    }

    @Override
    public boolean deleteGoodsByGoodsId(String username, String goodsId) {
    
    
        redisTemplate.opsForHash().delete(username, goodsId);
        return true;
    }

    @Override
    public Map selectTotalGoods(String username) {
    
    
        Map entries = redisTemplate.opsForHash().entries(username);


        return entries;
    }
}

`  他 所有的操作都是基于用户层面的 也就是说一个用户分配一个key``

猜你喜欢

转载自blog.csdn.net/weixin_43689953/article/details/112425774