(1)用户信息数据表user_info
userID、红包ID、祝福语、红包类型、红包个数、红包金额、超时
(2)用户钱包数据表user_wallet
userID、money、银行卡ID等其他字段
(3)发送红包数据表red_send
红包ID、senderID、红包个数、红包金额、祝福语、最佳手气、发出时间
(4)接收红包数据表red_receive
红包ID、receiver、接收时间、接收金额
4.2随机算法
很多人说红包序列是预先在手机发出去的时候已经产生好随机序列,其实这样会产生大量的数据库读写操作,内存读的速度以DDR3-2400为例,能达到17G/s,写的速度达到18G/s(参考文献:http://m.it168.com/article_1410707_p5.html)。而硬盘数据库的读写速度最多达到133MB/s。可见大量的从硬盘读写数据不但容易使硬盘损坏,更达不到高并发的读写需求。所以预先生成随机序列写入数据库,用户抢的时候再读出红包金额并将用户信息写入数据库并不科学。所以采用内存实时计算随机序列并异步写入硬盘数据库储存的方法。基于内存的随机序列是伪随机序列,他并不是真正的随机,而是根据种子通过一定的算法计算出来的值,只要种子不变,每次计算出来的值的序列是一致的。也就是说当红包指纹(ID或者ID+时间戳或者其他算法生成)一定时,计算出来的序列是一致的,这样子就不用储存在数据库,而是实时计算,第一次取序列的第一个值,第二次取序列的第二个值,如此类推。(更详细的说明可以参考http://www.open-open.com/lib/view/open1430473257443.html)。具体步骤如下(代码以python举例子,没办法知道人家后台用什么语音写的):
以红包ID为种子
>>>red_ID = 1775509988475009
>>>random.seed(red_ID)
群手气红包的最小值为0.01,摇一摇红包的最小值为2.00
>>>min = 1.00
>>>if (红包为群手气红包):
min = 0.01
else(红包为摇一摇红包):
min = 2.00
群手气红包的最大值为剩余红包总额和个数的商的2倍(你可以在群里不停地发红包做回归,记得叫上我去拿红包,哈哈)。
湘ICP备2022002427号-10湘公网安备:43070202000427号
© 2013~2019 haote.com 好特网