【电商支付项目(七)】购物车模块 & SpringBoot整合Redis

本文介绍了Redis的安装过程,包括Linux和Windows下的步骤,并推荐了可视化管理工具。接着讲解了如何在SpringBoot中整合Redis,包括添加依赖和配置,以及使用Gson进行序列化操作。在示例中展示了如何将商品信息存入Redis,并通过HashMap优化查询速度,同时展示了如何处理商品数量的累加操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis(高性能)

用户购物车、某条状态、文章点赞

MongoDB(海量数据)

Elasticsearch/HBase(大数据)

Redis 安装(开发环境、单节点)

可视化管理工具:

Another.Redis.Desktop.Manager.1.2.5.exe(Win)
Another.Redis.Desktop.Manager.1.2.5.dmg(Mac)

Redis安装

1、Linux下安装

2、Windows下:
版本:5.0.x || 下载链接见博客资源
①双击 redis-server,出现以下界面即代表redis正常启动
在这里插入图片描述
②使用redis可视化工具
填写地址和端口,其余空着即可

在这里插入图片描述
TTL :过期时间,不设置就是不过期
在这里插入图片描述

SpringBoot整合Redis

步骤一①:添加依赖

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
 </dependency>

步骤二②:配置

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://127.0.0.1:3306/mall?characterEncoding=utf-8&&useSSL=false&&serverTimezone=GMT%2B8
  redis:
    host: 127.0.0.1
    port: 6379

引入gson依赖 序列化

 <!-- 也可以用 fastjson 序列化-->
 <dependency>
     <groupId>com.google.code.gson</groupId>
     <artifactId>gson</artifactId>
 </dependency>
@Service
public class CartServiceImpl implements ICartService {

    private final static String CART_REDIS_KEY_TEMPLATE = "cart_%d";

    @Autowired
    private ProductMapper productMapper;

    @Autowired
    private StringRedisTemplate redisTemplate;

    private Gson gson = new Gson();

    @Override
    public ResponseVo<CartVo> add(Integer uid, CartAddForm form) {
        Integer quantity = 1;

        Product product = productMapper.selectByPrimaryKey(form.getProductId());

        // 商品是否存在
        if (product == null) {
            return ResponseVo.error(ResponseEnum.PRODUCT_NOT_EXIST);
        }

        // 商品是否正常在售
        if (!product.getStatus().equals(ProductStatusEnum.ON_SALE.getCode())) {
            return ResponseVo.error(ResponseEnum.PRODUCT_OFF_SALE_OR_DELETE);
        }

        // 商品库存是否充足
        if (product.getStock() <= 0) {
            return ResponseVo.error(ResponseEnum.PRODUCT_STOCK_ERROR);
        }

        // 写入到redis
        // key: cart_1
        redisTemplate.opsForValue().set(String.format(CART_REDIS_KEY_TEMPLATE, uid),    // key
                gson.toJson(new Cart(product.getId(), quantity, form.getSelected()))); // 用gson将对象转化为String类型 序列化
        return null;
    }
}

在这里插入图片描述
改进 -> Hashmap 提高查询速度(相对列表)

 // 写入到redis
 // key: cart_1
 HashOperations<String, String, String> opsForHash = redisTemplate.opsForHash();
 opsForHash.put(String.format(CART_REDIS_KEY_TEMPLATE, uid),    // key
         String.valueOf(product.getId()), // HashMap 的 key
         gson.toJson(new Cart(product.getId(), quantity, form.getSelected()))); // 用gson将对象转化为String类型 序列化

在这里插入图片描述
Redis key 设置为累加

// 写入到redis
// key: cart_1
HashOperations<String, String, String> opsForHash = redisTemplate.opsForHash();
String redisKey = String.format(CART_REDIS_KEY_TEMPLATE, uid);

Cart cart;
String value = opsForHash.get(redisKey, String.valueOf(product.getId()));
if (StringUtils.isEmpty(value)) {
    // 没有该商品,新增
    cart = new Cart(product.getId(), quantity, form.getSelected());
}else {
    // 已经有了,数量 +1
    cart = gson.fromJson(value, Cart.class); // 反序列化
    cart.setQuantity(cart.getQuantity() + quantity);
}
opsForHash.put(redisKey,    // key
        String.valueOf(product.getId()), // HashMap 的 key
        gson.toJson(cart)); // 用gson将对象转化为String类型 序列化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心海非海_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值