凭证卷发放流程优化方案

2024-01-28 17:20

本文主要是介绍凭证卷发放流程优化方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

上周线上有多个大促活动,创建了多个凭证卷模版,并导入了大量劵码,其中有多个卷模版下的劵码超过50w+, 在发放劵的时候,会先查询一次卷码库存,其中劵模版ID是分库分表键,所以在统一模版下的数据量过多了以后,就会导致慢sql

select * from t_coupon_code from templateId = #{templateId} and status = "未发放" limit 20;

Q&A

Q1: 为什么sql 要写limit 20,直接查一个不行吗?

因为发放过程存在并发问题,玩法系统的RT有要求,不能超过100ms,所以营销获取可用劵码的时候多拿了几条,然后随机返回一条,减缓并发过程中的冲突,就算两个用户拿到了同一个劵码了,在后续的更新流程当中,一定会有一方更新失败,所以不存在两个用户抢到同一张劵码的情况

Q2: 为什么同一模版下,劵码量大了会导致慢SQL?

虽然sql,能够命中索引,但是后面的字段区分度不大,会扫描整个索引树,如果还不懂,建议回归校园

优化方案

引入Redis的set结构

为什么是set不是list?

:::success
List: 也是能够实现这样的效果的,但是需要防止出现重复元素,因为劵码是不会重复的
Set: 不仅能够去重,而且也能随机弹出集合内的元素(时间复杂度O(1))
:::

引入redis以后如何发放劵码

这里只是简单给个思路,我很懒不想画流程图了,在公司天天敲,😡

  1. 从redis中pop出
  2. 如果pop的元素不是空,查询数据库 并返回结果
  3. 如果是空,判断当前劵码是否没有库存了(redis中的一个标记位)
  4. 如果有库存 加载DB中的数据到缓存,如果没有加载到,说明没有库存了,缓存中记录标记

引入redis以后数据一致性如何保证

会出现短暂的不一致场景:运营删除劵码库存的时候
但是不会有影响,应为pop,出一个已经被删除的元素以后,后续走正常的发放动作,这个过程中更新DB会出现问题,从而避免了并发问题

这篇关于凭证卷发放流程优化方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/654288

相关文章

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装

MySQL的cpu使用率100%的问题排查流程

《MySQL的cpu使用率100%的问题排查流程》线上mysql服务器经常性出现cpu使用率100%的告警,因此本文整理一下排查该问题的常规流程,文中通过代码示例讲解的非常详细,对大家的学习或工作有一... 目录1. 确认CPU占用来源2. 实时分析mysql活动3. 分析慢查询与执行计划4. 检查索引与表

Redis 多规则限流和防重复提交方案实现小结

《Redis多规则限流和防重复提交方案实现小结》本文主要介绍了Redis多规则限流和防重复提交方案实现小结,包括使用String结构和Zset结构来记录用户IP的访问次数,具有一定的参考价值,感兴趣... 目录一:使用 String 结构记录固定时间段内某用户 IP 访问某接口的次数二:使用 Zset 进行

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push