秒杀电商-库存缓存

本文介绍了电商秒杀场景下,如何利用Redis缓存优化下单接口性能,将平均响应时间从0.5s降至0.2s,TPS提升至1200。同时,通过RocketMQ实现库存异步更新,确保数据库库存的一致性。在RocketMQ的部署过程中,遇到了各种问题,如Algorithm HmacSHA1错误、文档不清晰等,最终成功配置并使用RocketMQ进行消息队列处理,实现了库存缓存与最终一致性。
摘要由CSDN通过智能技术生成

先来三张图,说一下具体的思路
1、交易流程
在这里插入图片描述
2、rocketmq部署
在这里插入图片描述
3、一致性
在这里插入图片描述
可算是被坑死了,待我细细道来:晕了一下午,明天捋一捋思路。

首先通过jmeter压测发现,下单接口频繁进行数据库查询导致平均响应时间0.5s左右,tps400,所以我们就考虑使用redis做缓存,对商品对象,user对象进行缓存,修改原先商品查询和用户查询接口:

@Override
    public ItemModel getItemByIdInCache(Integer id) {
        ItemModel itemModel = (ItemModel) redisTemplate.opsForValue().get("item_id" + id);
        if (itemModel == null) {
            itemModel = this.getItemById(id);
            redisTemplate.opsForValue().set("item_id" + id,itemModel);
            redisTemplate.expire("item_id" + id, 10, TimeUnit.MINUTES);
        }
        return itemModel;
    }
@Override
    public UserModel getUserByIdInCache(String id) {
        UserModel userModel = (UserModel) redisTemplate.opsForValue().get("user_id" + id);
        if (userModel == null) {
            userModel = this.getUserById(id);
            redisTemplate.opsForValue().set("user_id" + id, userModel);
            redisTemplate.expire("user_id" + id, 10, TimeUnit.MINUTES);
        }
        return userModel;
    }

修改下单接口:

@Override
    @Transactional
    public OrderModel createOrder(String userId, Integer itemId, Integer promoId, Integer amount) throws BusinessException {


        // 校验 商品存在 用户合法 数量正确
//        ItemModel itemModel = itemService.getItemById(itemId);
        ItemModel itemModel = itemService.getItemByIdInCache(itemId);
        if (itemModel == null) {
            throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR, "商品信息不正确");
        }
//        UserModel userModel = userService.getUserById(userId);
        UserModel userModel = userService.getUserByIdInCache(userId);
        if (userModel == null) {
            throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR, "用户信息
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值