博客
关于我
springboot项目实战---Redis购物车
阅读量:368 次
发布时间:2019-03-04

本文共 7554 字,大约阅读时间需要 25 分钟。

Redis购物车

个人商城系统,后台对购物车数据进行“半持久化”。

因为购物车增删改的操作很频繁,如果使用mysql效率会很低,
所以使用redis进行存储。如果担心redis会挂,可使用redis集群,还是很靠谱的


配置文件 和redis连接池

参考上一篇redis进行缓存

购物车redis缓存设置:
CartPrefix.class

public class CartPrefix extends BasePrefix{       public CartPrefix(int expireSeconds, String prefix) {           super(expireSeconds, prefix);    }    /**     * 设置购物车缓存     */    public static CartPrefix getCartList= new CartPrefix(0,"cart");}

购物车service层代码:

CartService.class

@Service@Slf4jpublic class CartServiceImpl implements CartService {       @Autowired    RedisService redisService;    @Autowired    ProductInfoDao productInfoDao;    @Override    public int addCart(String userId, String productId, int num) {           //key为 userId_cart,校验是否已存在        Boolean exists = redisService.existsValue(CartPrefix.getCartList,userId,productId);        if (exists){               //获取现有的购物车中的数据            String json = redisService.hget(CartPrefix.getCartList,userId,productId);            if (json !=null){                   //转换为java实体类                CartDto cartDto = JSON.toJavaObject(JSONObject.parseObject(json),CartDto.class);                cartDto.setProductNum(cartDto.getProductNum()+num);                redisService.hset(CartPrefix.getCartList,userId,productId,JSON.toJSON(cartDto).toString());            }else {                   return 0;            }            return 1;        }        //根据商品id获取商品        ProductInfo productInfo = productInfoDao.findProductById(productId);        if (productInfo==null){               return 0;        }        //设置购物车值        CartDto cartDto = new CartDto();        cartDto.setProductId(productId);        cartDto.setProductName(productInfo.getProductName());        cartDto.setProductIcon(productInfo.getProductIcon());        cartDto.setProductPrice(productInfo.getProductPrice());        cartDto.setProductStatus(productInfo.getProductStatus());        cartDto.setProductNum(num);        cartDto.setCheck("1");        redisService.hset(CartPrefix.getCartList,userId,productId,JSON.toJSON(cartDto).toString());        return 1;    }    /**     * 展示购物车     * @param userId     * @return     */    @Override    public List
getCartList(String userId) { List
jsonList = redisService.hvals(CartPrefix.getCartList,userId); List
cartDtoList = new LinkedList<>(); for (String json:jsonList){ CartDto cartDto = JSON.toJavaObject(JSONObject.parseObject(json),CartDto.class); cartDtoList.add(cartDto); } return cartDtoList; } /** * 更新数量 * @param userId * @param productId * @param num * @return */ @Override public int updateCartNum(String userId, String productId, int num) { String json = redisService.hget(CartPrefix.getCartList,userId,productId); if (json==null){ return 0; } CartDto cartDto = JSON.toJavaObject(JSONObject.parseObject(json),CartDto.class); cartDto.setProductNum(num); redisService.hset(CartPrefix.getCartList,userId,productId,JSON.toJSON(cartDto).toString()); return 1; } /** * 全选商品 * @param userId * @param checked * @return */ @Override public int checkAll(String userId, String checked) { //获取商品列表 List
jsonList = redisService.hvals(CartPrefix.getCartList,userId); for (String json:jsonList){ CartDto cartDto = JSON.toJavaObject(JSONObject.parseObject(json),CartDto.class); if ("true".equals(checked)){ cartDto.setCheck("1"); }else if ("false".equals(checked)){ cartDto.setCheck("0"); }else { return 0; } redisService.hset(CartPrefix.getCartList,userId,cartDto.getProductId(),JSON.toJSON(cartDto).toString()); } return 1; } /** * 删除商品 * @param userId * @param productId * @return */ @Override public int delCartProduct(String userId, String productId) { redisService.hdel(CartPrefix.getCartList,userId,productId); return 1; } /** * 清空购物车 * @param userId * @return */ @Override public int delCart(String userId) { redisService.delete(CartPrefix.getCartList,userId); return 1; }}

购物车接口实现:

CartController.class

@RestController@RequestMapping("/cart")@Slf4jpublic class CartController {       @Autowired    CartService cartService;    /**     * 加入购物车     * @param reqMap     * @param user     * @return     */    @PostMapping(value = "/add")    @Autorization    public Object addCart(@RequestBody Map
reqMap, @CurrentUser User user){ //获取登陆用户的userId String userId = RequestUtil.getMapString(user.getId()); String productId = RequestUtil.getMapString(reqMap.get("product_id").toString()); String numString = RequestUtil.getMapString(reqMap.get("product_num").toString()); Integer num = Integer.parseInt(numString); //加入购物车 int effectNum = cartService.addCart(userId,productId,num); if (effectNum<=0){ return ResultUtil.fail(ResultEnum.ADD_CART_ERROR); } return ResultUtil.ok(ResultEnum.ADD_CART_SUCCESS.getMessage()); } @GetMapping(value = "/getCartList") @Autorization public Object getCartList(@CurrentUser User user){ String userId = RequestUtil.getMapString(user.getId()); List
cartDtoList = cartService.getCartList(userId); return ResultUtil.ok(cartDtoList); } @PostMapping(value = "/updateCartNum") @Autorization public Object updateCartNum(@RequestBody Map
reqMap,@CurrentUser User user){ String userId = RequestUtil.getMapString(user.getId()); String productId = RequestUtil.getMapString(reqMap.get("product_id").toString()); String numString = RequestUtil.getMapString(reqMap.get("product_num").toString()); Integer num = Integer.parseInt(numString); int effectNum = cartService.updateCartNum(userId,productId,num); if (effectNum <=0){ return ResultUtil.fail(); } return ResultUtil.ok(); } @PostMapping(value = "/checkAll") @Autorization public Object checkAll(@RequestBody Map
reqMap,@CurrentUser User user){ String userId = RequestUtil.getMapString(user.getId()); String check = RequestUtil.getMapString(reqMap.get("check").toString()); int effectNum = cartService.checkAll(userId,check); if (effectNum <=0){ return ResultUtil.fail(); } return ResultUtil.ok(); } @PostMapping("/delCartProduct") @Autorization public Object delCartProduct(@RequestBody Map
reqMap,@CurrentUser User user){ String userId = RequestUtil.getMapString(user.getId()); String productId = RequestUtil.getMapString(reqMap.get("product_id").toString()); int effectNum = cartService.delCartProduct(userId,productId); if (effectNum <=0){ return ResultUtil.fail(); } return ResultUtil.ok(); } @PostMapping("/delCart") @Autorization public Object delCart(@CurrentUser User user){ String userId = RequestUtil.getMapString(user.getId()); int effectNum = cartService.delCart(userId); if (effectNum <=0){ return ResultUtil.fail(); } return ResultUtil.ok(); }}

商城项目地址 https://github.com/627886474/sneaker

欢迎start,如有不足,还请指教。

在这里插入图片描述

转载地址:http://qwve.baihongyu.com/

你可能感兴趣的文章
Mysql学习总结(79)——MySQL常用函数总结
查看>>
Mysql学习总结(7)——MySql索引原理与使用大全
查看>>
Mysql学习总结(80)——统计数据库的总记录数和库中各个表的数据量
查看>>
Mysql学习总结(81)——为什么MySQL不推荐使用uuid或者雪花id作为主键?
查看>>
Mysql学习总结(82)——MySQL逻辑删除与数据库唯一性约束如何解决?
查看>>
Mysql学习总结(83)——常用的几种分布式锁:ZK分布式锁、Redis分布式锁、数据库分布式锁、基于JDK的分布式锁方案对比总结
查看>>
Mysql学习总结(84)—— Mysql的主从复制延迟问题总结
查看>>
Mysql学习总结(85)——开发人员最应该明白的数据库设计原则
查看>>
Mysql学习总结(8)——MySql基本查询、连接查询、子查询、正则表达查询讲解
查看>>
Mysql学习总结(9)——MySql视图原理讲解与使用大全
查看>>
Mysql学习笔记 - 在Centos7环境下离线安装Mysql
查看>>
MySQL学习笔记十七:复制特性
查看>>
Mysql学习第一课-mysql的定义及sql语句
查看>>
mysql安全模式: sql_safe_updates
查看>>
mysql安装,卸载,连接
查看>>
MySQL安装之没有配置向导
查看>>
mysql安装出现 conflicts with mysql*的解决办法
查看>>
mysql安装卡在最后一步解决方案(附带万能安装方案)
查看>>
mysql安装和启动命令小结
查看>>
Mysql安装教程(命令行)
查看>>