秒杀系统中如何动态生成下单随机URL
秒杀系统中通常会避免用户之间访问下单页面的URL(避免使用爬虫来造成不公平)。所有需要将URL动态化,即使秒杀系统的开发人员也无法在知晓在秒杀开始时的URL。解决办法是在获取秒杀URL的接口中,返回一个服务器端生成的随机数,并在下单URL中传递该参数完成下单。
首先构造一个获取下单URL的modle
public class Exposer {//加密措施private String md5;//其中必要字段,如是否开启秒杀,时间等省
}
获取秒杀URL的conntroller:
@RequestMapping(value = "/{goodsId}/getUrl")public Exposer exposer(@PathVariable("goodsId") Long seckillGoodsId){//goodsId表示是什么商品,然后根据该商品的数据库依次获得尚未被秒杀的每个商品的唯一ID,然后根据商品的唯一ID来生成唯一的秒杀URLseckillGoodsId为某个商品的唯一id
其中这一步可以省,之间将goodsId表示的传递给exportSeckillUrl也可以完成//异常判断省掉,返回上述的model对象。即包含md5的对象Exposer result =seckillService.exportSeckillUrl(seckillGoodsId);return result;}
Service的方法实现:
//加入一个混淆字符串(秒杀接口)的salt,为了我避免用户猜出我们的md5值,值任意给,越复杂越好
private final String salt="12sadasadsafafsafs。/。,";public Exposer exportSeckillUrl(long seckillGoodsId) {//首页根据该seckillGoodsId判断商品是否还存在。//如果不存在则表示已经被秒杀String md5 = getMD5(seckillGoodsId);return new Exposer(md5);
}private String getMD5(long seckillGoodsId){//结合秒杀的商品id与混淆字符串生成通过md5加密String base=seckillGoodsId+"/"+salt;String md5= DigestUtils.md5DigestAsHex(base.getBytes());return md5;}
用户在获取获取到下单URL的时候,当秒杀开启后则会得到一个md5值。通过该md5值来完成下单具体的秒杀交易:
具体执行秒杀操作的接口
@RequestMapping(value = "/{seckillGoodsId}/{md5}/execution")public Boolean execution(@PathVariable("seckillGoodsId") Long seckillGoodsId,@PathVariable("md5") String md5){Boolean result = seckillService.executionSeckillId(seckillId,md5);//executionSeckillId的操作是强事务,操作为减库存+增加购买明细,最终返回是否秒杀成功,秒杀成功的商品消息等。这里省,只返回是否接口合理的信息。return result;}
Service 执行秒杀的过程:
public Boolean executionSeckillId(long seckillID,String md5){if(md5==null||!md5.equals(getMD5(seckillID))){//表示接口错误,不会执行秒杀操作return false;}//接口正确,排队执行秒杀操作。减库存+增加购买明细等信息,这里只返回falsereturn true;}
}
秒杀系统中如何动态生成下单随机URL相关推荐
- Linux系统中的“动态库”和“静态库”
Linux系统中的"动态库"和"静态库" 在Linux操作系统中,普遍使用ELF格式作为可执行程序或者程序生成过程中的中间格式.ELF(Executable a ...
- python动态映射_Python Django框架url反向解析实现动态生成对应的url链接示例
本文实例讲述了Python Django框架url反向解析实现动态生成对应的url链接.分享给大家供大家参考,具体如下: url反向解析:根据url路由规则,动态生成对应的url链接 (防止硬编码). ...
- 简单秒杀系统中的redis限时抢购
为什么要限时? 上一篇文章介绍了如何在大数据量用户的请求下对请求数量做限制,也就是接口限流.在实际的秒杀中,除了要考虑接口限流外,还要考虑即使用户通过了令牌桶算法的限流,但是也可能在要秒杀商品的时候( ...
- Linux系统中的动态库和静态库
来源: wjlkoorey258 链接: http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库 ...
- 一篇文章告诉你如何在报表系统中实现自动生成Word报告
点击获取ActiveReports v14.0最新版下载 在报表系统中,生成Word报告的常见步骤分为以下四步:采集原始数据.值后台传递.生成最终报告模板.实现打印和预览.可见,系统在生成报告之前,需 ...
- 关于电商秒杀系统中防超卖、以及高性能下单的处理方案简述
秒杀抢购系统的成功平稳运行,有一些需要注意的知识点. 1 高并发,以及刷接口等黑客请求对服务端的负载冲击 2 高并发时带来的超卖,即商品数量的控制 3 高负载下,下单的速度和成功率的保证 4 其他 以 ...
- java 消息队列 秒杀_【IDEA+SpringBoot+Java商城秒杀实战21】高并发秒杀系统接口优化 RabbitMQ异步下单...
问题: 针对秒杀的业务场景,在大并发下,仅仅依靠页面缓存.对象缓存或者页面静态化等还是远远不够.数据库压力还是很大,所以需要异步下单,如果业务执行时间比较长,那么异步是最好的解决办法,但会带来一些额外 ...
- c++中如何动态生成变量名
这个问题也困扰了我好久,要是真的去动态的生成x0,x1,x2........是真的不可能. 但是会有办法做到相似效果. 比如想要做到如下: for(int i = 0; i < _vector. ...
- 关于电商秒杀系统中防超卖处理方案简述,统统给你解决!
一.Spring Boot 相关 (1)SpringBoot 面试专题 什么是 Spring Boot? Spring Boot 有哪些优点? 什么是 JavaConfig? 如何重新加载 Sprin ...
最新文章
- PCIe知识学习 (转载)
- 见与不见 ---仓央嘉措
- ntfs分配单元大小怎么选_星月菩提尺寸大小怎么选
- firedebug调试Jquery
- 技术分享 | 业务模板的技术实践
- Win11怎么设置提高电脑游戏性能
- 网页中调用Google地图
- python二维数组初始化_如何在Python中初始化二维数组?
- 全局配置_再次强调:必须站在全局的角度去考虑客厅的内机配置
- cad插件_CAD插件坐标标注安装教程
- alter index
- 和数研究院4周年庆,初心不改,笃行致远!
- 15.IGame游戏公司的故事
- C语言,指针变量的*p,p以及p的区别
- JavaWeb学习-案例练习-图书管理后台-5- 完成图书删除功能
- unity webgl打包 苹果12以上机型打开连接后模型黑屏卡帧问题
- mac上配置cordova开发Android平台APP环境
- 仔细体验,我想从产品设计的角度分析分析微信的声音锁
- 变换矩阵在二维图形中的应用
- 两种简单的方法Docker构建LANMP
热门文章
- Python启动器(py.exe)主版本次版本相同补丁版本不同解释器选择的异常问题
- Unity3d C#利用材质(Material)贴图的偏移实现2D游戏单背景图无限移动背景效果功能(含源码)
- Filter进行登录验证时循环重定向的解决方法
- 宝藏又小众的西方立绘文字游戏素材网站分享
- 如何正确对待鱼刺卡喉?
- 鱼刺类_多线程应用v5.4.3 例程+模块
- 离婚3年以后发现有离婚时尚未分割的夫妻共同财产
- 杭州市商用密码应用协会领导一行莅临世平信息参观交流
- 封神台 第四章:进击!拿到Web最高权限(绕过防护上传木马)
- oracle到神通,我的ORACLE笔记(三)