微信的金额什么时候算?

答:微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储。。

采取实时计算金额的考虑:预算需要占存储,实时效率很高,预算才效率低。

实时性:为什么明明抢到红包,点开后发现没有?

答:2014年的红包一点开就知道金额,分两次操作,先抢到金额,然后再转账。

2015年的红包的拆和抢是分离的,需要点两次,因此会出现抢到红包了,但点开后告知红包已经被领完的状况。进入到第一个页面不代表抢到,只表示当时红包还有。

分配:红包里的金额怎么算?为什么出现各个红包金额相差很大?

答:随机,额度在0.01和剩余平均值*2之间。

例如:发100块钱,总共10个红包,那么平均值是10块钱一个,那么发出来的红包的额度在0.01元~20元之间波动。

当前面3个红包总共被领了40块钱时,剩下60块钱,总共7个红包,那么这7个红包的额度在:0.01~(60/7*2)=17.14之间。

注意:这里的算法是每被抢一个后,剩下的会再次执行上面的这样的算法(Tim老师也觉得上述算法太复杂,不知基于什么样的考虑)。

这样算下去,会超过最开始的全部金额,因此到了最后面如果不够这么算,那么会采取如下算法:保证剩余用户能拿到最低1分钱即可。

如果前面的人手气不好,那么后面的余额越多,红包额度也就越多,因此实际概率一样的。

红包的设计

答:微信从财付通拉取金额数据过来,生成个数/红包类型/金额放到redis集群里,app端将红包ID的请求放入请求队列中,如果发现超过红包的个数,直接返回。根据红包的裸祭处理成功得到令牌请求,则由财付通进行一致性调用,通过像比特币一样,两边保存交易记录,交易后交给第三方服务审计,如果交易过程中出现不一致就强制回归。

发性处理:红包如何计算被抢完?

答:cache会抵抗无效请求,将无效的请求过滤掉,实际进入到后台的量不大。cache记录红包个数,原子操作进行个数递减,到0表示被抢光。财付通按照20万笔每秒入账准备,但实际还不到8万每秒。

通如何保持8w每秒的写入?

答:多主sharding,水平扩展机器。

据容量多少?

答:一个红包只占一条记录,有效期只有几天,因此不需要太多空间。

询红包分配,压力大不?

答:抢到红包的人数和红包都在一条cache记录上,没有太大的查询压力。

一个红包一个队列?

答:没有队列,一个红包一条数据,数据上有一个计数器字段。

有没有从数据上证明每个红包的概率是不是均等?

答:不是绝对均等,就是一个简单的拍脑袋算法。

拍脑袋算法,会不会出现两个最佳?

答:会出现金额一样的,但是手气最佳只有一个,先抢到的那个最佳。

每领一个红包就更新数据么?

答:每抢到一个红包,就cas更新剩余金额和红包个数。

红包如何入库入账?

数据库会累加已经领取的个数与金额,插入一条领取记录。入账则是后台异步操作。

入帐出错怎么办?比如红包个数没了,但余额还有?

答:最后会有一个take all操作。另外还有一个对账来保障。

群发红包 java如何实现_java 微信红包算法代码实现及架构设计相关推荐

  1. 微信红包助手php,php生成微信红包

    php生成微信红包 今天给大家带来微信红包算法的函数!! 用php来生成微信红包~ 直接看代码:/** * 微信红包生成函数 * @param $total 金额 * @param int $num  ...

  2. java实现红包要多少钱_java实现红包的分配算法

    个人推测,微信红包在发出的时候已经分配好金额.比如一个10元的红包发给甲乙丙三个人,其实在红包发出去的时候,已经确定了第一个会领取多少,第二个会领取多少金额. 而不是在领取的时候才计算的.下面贴出实现 ...

  3. PHP红包搭建步骤,PHP 生成微信红包代码简单

    这篇文章主要介绍了PHP 生成微信红包代码简单的相关资料,需要的朋友可以参考下 废话不多说了,一切解释尽在代码中,具体代码如下所示: /** * @param $total [你要发的红包总额] * ...

  4. php微信红包雨效果,微信红包雨特效口令大全 微信红包雨特效口令有哪些

    微信红包雨特效口令有哪些?新年牛气冲天,在微信有一场大型的红包雨送给玩家.那么特效口令有哪些呢,下面小编给大家带来微信红包雨特效口令大全,一起来看看吧. 微信红包雨特效口令大全 一.王者荣耀 [排位] ...

  5. 微信红包雨怎么抢_微信红包雨怎么发出? 微信红包雨发送技巧有哪些?

    微信红包雨怎么发出? 微信红包雨发送技巧有哪些?小编最近学会了一项技能,那就是发微信红包雨,一包多发,有对微信红包雨怎么发出感兴趣的伙伴吗,接下来小编与您分享下微信红包雨怎么发出吧. 微信红包雨怎么发 ...

  6. 红包php源码,生成微信红包

    生成微信红包/** * @param $total [你要发的红包总额] * @param int $num [发几个] * @return array[生成红包金额] */ function get ...

  7. android仿微信红包动画,Android仿打开微信红包动画效果实现代码

    首先看下效果: 实现原理: 准备3张不同角度的图片,通过AnimationDrawable帧动画进行播放即可 代码实现: 1.编写动画xml文件: 根标签为animation-list,其中onesh ...

  8. 微信红包封面怎么制作?微信红包封面序列号如何领取

    每次过年在微信上发红包的时候,看见别人独一无二的红包封面,就会有疑惑,他们是去哪里弄的红包封面呢?为什么只有我的红包封面是最原始的?微信红包封面怎么制作?搜索了一番才知道,原来是这样制作的. 第一步: ...

  9. java加减法验证码_Java,Springboot 实现算法验证码加减法图形验证码,Kaptcha 实现加减法验证码...

    最近在做一个加减法验证码,记录下实现的过程. 通常Java实现验证码的工具会用到 kaptcha 这个工具包,但实现的验证码都是图形验证码,没有看到加法验证码,查询了相关资料,实现了加减法验证码,效果 ...

  10. java代码实现希尔排序_Java希尔排序算法代码实现

    Java希尔排序算法代码实现 时间:2017-08-30     来源:华清远见JAVA学院 什么是Java希尔排序算法呢? 希尔排序算法实际上是一种分组插入的排序算法,又被称为缩小增量排序.今天华清 ...

最新文章

  1. java导出excel压缩包_java动态导出excel压缩成zip下载的方法
  2. CentOS 7安装Nginx
  3. 【Flask项目2】创建用户模块的蓝图(7)
  4. 机器学习中激活函数和模型_探索机器学习中的激活和丢失功能
  5. 丰田pcs可以关闭吗_别只知道开不坏,现在的丰田还有这些厉害绝招!
  6. wxpython 优秀的界面_wxPython图形用户界面
  7. 永久居家办公,你愿意吗?
  8. Mysql多实例实施文档
  9. Kafka 麒麟先生_近百位超人气嘉宾出席元旦萤火虫,重磅新企划蓄势待发!
  10. hough变换圆检测matlab,hough变换检测圆的matlab程序
  11. 关于计算机作文的结束语,语文老师:万能作文开头30篇结尾50篇,吃透次次“满分范文”...
  12. 文件系统FatFsR0.09a翻译(三):ff.h
  13. 什么是NIC(网络接口卡)?
  14. 【趣读官方文档】1.管家的抉择 (Android进程生命周期)
  15. C# 利用Excel及Spire.xls实现用户自定义打印模板
  16. Filtered off site request to
  17. 数据库: mongodb导入json数据
  18. 菜刀,蚁剑,冰蝎,哥斯拉的流量特征
  19. 苹果将于4月20日举行产品发布会
  20. Python 变量赋值和命名规则

热门文章

  1. php整点抽奖活动,php实现活动人选抽奖功能代码
  2. GoEasy使用方法记录
  3. php共生模式,phpwamp单身狗模式的详解与分析,单身狗模式/即霸体模式的作用讲解。...
  4. 23种设计模式之builder模式
  5. 安全生产知识竞赛答题小程序
  6. yb3防爆电机型号含义_YBX3防爆电机
  7. EDA第一次课<1117电路图的绘制>
  8. 室内设计——健身房室内设计(包含预览图jpg和.psd文件)
  9. Camera:双目成像原理
  10. Mybatis源码解析!!! 附中午注释源码