算法-抽奖概率/秒杀
OkidoGreen
这个作者很懒,什么都没留下…
展开
-
Java实现抢红包算法,附完整代码(公平版和手速版)
二倍均值法(公平版)这是一种很合理很公平的抢红包算法了,绝对不会让你拼手速的,就别天真了。在此我们假设红包剩余金额为 M红包剩余数量为 N这种算法就是每次都在区间[0,M/N×2] 随机取一个数假设100元红包发10个人,那么合理的做法应该是每个人领到10元的概率相同。第一个人随机金额的范围为[0,100/10×2] ,也就是[0,20],这样平均可以领到10元,此时剩余金额为100-10=90。第二个人随机金额的范围为[0,90/9×2] ,也就是[0,20],这样平均也可以领到10元,转载 2020-09-19 10:21:15 · 1018 阅读 · 0 评论 -
Web系统大规模并发——电商秒杀与抢购
电商的秒杀和抢购,对我们来说,都不是一个陌生的东西。然而,从技术的角度来说,这对于Web系统是一个巨大的考验。当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要。这次我们会关注秒杀和抢购的技术实现和优化,同时,从技术层面揭开,为什么我们总是不容易抢到火车票的原因? 一、大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整...转载 2015-08-28 11:32:00 · 1386 阅读 · 0 评论 -
使用redis秒杀出现产品超发现象求解?
https://segmentfault.com/q/1010000007165163经典的Check-then-Act错误 最近在做一个秒杀活动,处于性能和响应速度的考虑,使用了redis。写的时候就特别注意了杜绝超发现象,基于redis理论的cas(check and set)乐观锁,想着应该能够杜绝该问题,但是还是出现了,很疑惑求大神帮助,具体的代码大致如下:<?ph...转载 2018-02-05 18:54:21 · 2748 阅读 · 1 评论 -
redis实现高并发下的抢购/秒杀功能
https://www.cnblogs.com/phpper/p/7085663.html 之前写过一篇文章,高并发的解决思路(点此进入查看),今天再次抽空整理下实际场景中的具体代码逻辑实现吧:抢购/秒杀是如今很常见的一个应用场景,那么高并发竞争下如何解决超抢(或超卖库存不足为负数的问题)呢?常规写法:查询出对应商品的库存,看是否大于0,然后执行生成订单等操作,但是在判断库...转载 2018-03-29 19:18:08 · 3358 阅读 · 0 评论 -
redis+lua与秒杀--lua入门
秒杀场景用户秒杀,后端服务接收到请求之后的操作步骤:校验请求参数 解析用户信息 解析所秒商品信息,及秒商品数量 校验用户在限定的时间内是否秒过 校验库存是否充足 扣库存 记录用户秒单记录 异步写订单记录 返回请求问题在上面所描述的步骤中 校验库存与扣库存,存在先后顺序,但是并没有原子性。在关系数据库中,可以通过事务来解决这个问题,但是关系数据库性能有瓶颈。当然在请求量...转载 2018-08-08 22:01:39 · 949 阅读 · 1 评论 -
平台抽奖算法总结
https://www.xuanfengge.com/luck-draw.html前言但凡商户搞点营销活动,为了能触达更多的顾客,来点儿抽奖的把戏,应该是极好的,什么“刮刮乐”、“砸金蛋”、“大转盘”等等,换汤不换药,屡试不爽。从微客多营销平台各种活动的使用情况也能看出,抽奖活动一直是商户用得最多的线上活动,正所谓无利不起早,给点“花蜜”犒劳下“蜜蜂”也是应该的。需求分析那么问题来...转载 2018-08-05 13:31:57 · 17055 阅读 · 3 评论 -
redis+lua 实现分布式令牌桶,高并发限流
https://blog.csdn.net/sunlihuo/article/details/79700225 方案一、在提供给业务方的Controller层进行控制。 1、使用guava提供工具库里的RateLimiter类(内部采用令牌捅算法实现)进行限流 2、使用Java自带delayqueue的延迟队列实现(编码过程相对麻烦,此处省略代码) 3、使用Redis实现,存储两个k...转载 2018-08-09 11:20:55 · 4357 阅读 · 1 评论 -
Alias Method for Sampling
Milo老湿在他的博文 用JavaScript玩转游戏编程(一)掉宝类型概率 中提到了游戏中按一定概率掉宝的算法,即根据给定的PDF(probability density function),在线性时间内算出对应的CDF(cumulative distribution function),然后进行取样。一个例子如下:PDFval1234转载 2017-10-26 11:16:39 · 1883 阅读 · 2 评论 -
C#&PHP&Java实现Alias Method概率抽奖算法
最近在做抽奖服务端接口,会涉及到抽奖概率的问题,网上查资料找到一个比较好的抽奖概率的算法,Alias Method概率抽奖算法。今天就来分享一下这个算法的C#、PHP以及Java的实现。举个例子,游戏中玩家推倒了一个boss,会按如下概率掉落物品:10%掉武器 20%掉饰品 30%掉戒指 40%掉披风。现在要给出下一个掉落的物品类型,或者说一个掉落的随机序列,要求符合上述概率。转载 2016-12-21 11:27:39 · 5430 阅读 · 2 评论 -
微信红包算法?
作者:匿名用户链接:https://www.zhihu.com/question/22625187/answer/40041558来源:知乎著作权归作者所有,转载请联系作者获得授权。微信是采用什么样的算法做到的?简单百度了下,目前尚未有官方的说明,仅仅在知乎里有一个较为热门的讨论,链接戳这里 不过他们讨论的太过于深入,有掉坑之嫌。我按照自己的逻辑尝试了下,这个算法需要满转载 2016-08-31 21:54:43 · 3966 阅读 · 0 评论 -
抽奖-高并发
上一篇写了关于抽奖算法的实现,本文就抽奖的高并发做简单的介绍其实抽奖和秒杀系统的很多相似的地方,都会有这几个问题:防止用户非法请求并发请求比较大数据库压力大方案:负载均衡缓存多线程异步…流程:初始化-把抽奖活动和奖品数据都放到redis缓存当有用户参与抽奖活动就从redis把奖品列表取出来调用之前提到的算法如果中奖更新redis数据,同时提交任务转载 2016-08-31 21:33:19 · 8319 阅读 · 0 评论 -
抽奖-算法
最近在搞抽奖活动的项目开发,涉及到抽奖算法和高并发,本文讨论一下抽奖的算法实现。目标首先算法要满足几个目标:奖品尽量在活动期间被平均分布(不要在活动一开始就被抽完)大奖尽量在后面才被抽中奖品尽量不要有剩余每个奖品可以设置抽中概率对于最后一点,因为活动前并不知道参加活动人数,所以设置的概率反而影响了前面几点。如果概率大了可能活动一开始就被抽完,如果太小参与人数不多可能转载 2016-08-31 21:32:29 · 7087 阅读 · 0 评论 -
一个简单抽奖算法的实现以及如何预防超中
一个简单抽奖算法的实现以及如何预防超中需求每个用户每天有3次抽奖机会;抽奖奖池一共分为6档内容:现金红包1元,2元,3元,5元,iphone6s,谢谢参与;支持每天调整和配置抽奖的获奖概率;算法介绍每种奖品都有一个权重 对应一个区间 若落入该区间就表示中奖 调整区间大小就可改变获奖概率 即调整权重值即可奖品权重区间转载 2016-06-24 21:45:49 · 8055 阅读 · 0 评论 -
抽奖/红包算法
<?phpheader("Content-Type: text/html; charset=UTF-8");function dump($arr){ echo ''.print_r($arr,TRUE).'';}/*概率算法proArr array(100,200,300,400)*/function get_rand($proArr) { $result = '';转载 2016-06-24 21:45:12 · 2442 阅读 · 0 评论 -
微信红包随机算法初探
@来源于QCon某高可用架构群整理,整理朱玉华。背景:有某个朋友在朋友圈咨询微信红包的架构,于是乎有了下面的文字(有误请提出,谢谢)概况:2014年微信红包使用数据库硬抗整个流量,2015年使用cache抗流量。微信的金额什么时候算? 答:微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储。。 采取实时计算金额的考虑:预算需要占转载 2016-02-16 14:24:13 · 6654 阅读 · 1 评论 -
JAVA抽奖的算概率法
php:data.php处理前端发送的ajax请求,我们才用概率算法,根据设置好的中奖概率,将中奖结果以json的格式输出。关于概率计算的例子可以参照:PHP+jQuery实现翻板抽奖 $prize_arr = array( '0' => array('id'=>1,'prize'=>'平板电脑','v'=>3), '1' => array('id'=>2,'p转载 2015-07-09 16:13:26 · 7002 阅读 · 1 评论