为什么要写这个微信抢红包项目?2020年8月22日,公司庆周年,抢到100多个红包🧧,O(∩_∩)O哈哈~业务流程分析功能拆解新建红包在DB和Redis中新增记录抢红包(并发)【使用技术】Redis中数据类型String特性的原子自减(DECR键)和指定值自减(DECRBY键自减)《业务》请求Redis,当剩余红包数大于0,红包数量原子递减,随机获取计算的红包数量。当收到最后一个红包时,最后一个红包的数量=总数量-已抢到的红包总数量。更新数据库“查询红包记录”查询DB可以设计红包表CREATETABLE`red_pa??cket_info`(`id`int(11)NOTNULLAUTO_INCREMENT,`red_pa??cket_id`bigint(11)NOTNULLDEFAULT0COMMENT'红包id,使用timestamp+5随机数',`total_amount`int(11)NOTNULLDEFAULT0COMMENT'红包总量,单位分',`total_packet`int(11)NOTNULLDEFAULT0COMMENT'红包总数',`remaining_amount`int(11)NOTNULLDEFAULT0COMMENT'剩余金额红包数量,单位分',`remaining_packet`int(11)NOTNULLDEFAULT0COMMENT'剩余红包个数',`uid`int(20)NOTNULLDEFAULT0COMMENT'新红包用户用户ID',`create_time`timestampCOMMENT'创建时间',`update_time`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT'更新时间',PRIMARYKE`))ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8mb4COMMENT='红包信息表,新建一个红包并插入一条记录';红包记录表CREATETABLE`red_pa??cket_record`(`id`int(11)NOTNULLAUTO_INCREMENT,`amount`int(11)NOTNULLDEFAULT'0'COMMENT'抢红包Amount',`nick_name`varchar(32)NOTNULLDEFAULT'0'COMMENT'抢红包用户名',`img_url`varchar(255)NOTNULLDEFAULT'0'COMMENT'抢红包用户名头像',`uid`int(20)NOTNULLDEFAULT'0'COMMENT'抢红包用户的用户ID',`red_pa??cket_id`bigint(11)NOTNULLDEFAULT'0'COMMENT'红包id,使用时间戳+5位随机数',`create_time`timestampCOMMENT'创建时间',`update_time`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT'更新时间',PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8mb4COMMENT='插入红包记录表,抢红包记录';发红包API发红包接口开发添加一条新的红包记录到mysql添加一条红包记录到redis添加一条红包金额记录到redis添加一条红包金额记录到db简单存储一条记录,Service层和Mapper层,只是一个简单的sql语句,主要是提供思路,下面会附上案例的源码,大家不要慌,这时候以后进来的用户都抢红包失败,不会进入开箱红包抢红包环节。将请求红包ID的请求放入请求队列。如果发现红包数量超过数量,直接返回公告。如果抢红包,可能无法成功拆解。运气最好的概率很小,运气最好。往往后面发100元,一共10个红包,然后平均一个10元,发的红包数额在0.01到20元之间波动。前4个红包合计为收到30元时,还剩70元,共6个红包,则这6个红包的金额在0.01~23.3元之间波动红包抢接口开发“测试”》redenvelope》模拟高并发抢红包(Jmeter压测工具)因为我发了10个红包,金额20000,所以我用压测工具模拟了50个请求,只允许前10个请求抢红包,并且数量等于20,000BloomfilterBloomfilter简介Bloomfilter是1970年由Bloom提出的,它实际上是一个长二进制向量和一系列随机映射函数。布隆过滤器可用于检索元素是否在集合中。其优点是空间效率和查询时间远超一般算法,缺点是存在一定的误识别率和删除难度。优点与其他数据结构相比,布隆过滤器在空间和时间上具有巨大的优势。布隆过滤器存储空间和插入/查询时间都是常数。其他三列函数相互之间没有任何关系,便于硬件并行实现。布隆过滤器不需要存储元素本身,这在一些保密性要求非常严格的场合具有优势。缺点但是Bloomfilters的缺点也是有那么一点点明显。误算率就是其中之一。随着沉积元素数量的增加,误算率也会增加。但是如果元素个数太少,一个哈希表就足够了。Bloomfilter有什么用黑客流量攻击:故意访问不存在的数据,导致搜索程序不断访问DB数据黑客安全拦截:当黑客访问不存在的缓存时,快速返回,避免缓存和DB挂起网络爬虫到URLDeduplication,避免抓取相同的URL地址反垃圾邮件,从数十亿垃圾邮件列表(类似垃圾短信)缓存分解中判断某封邮件是否为垃圾邮件,将已有的缓存放入Bloom中,当黑客访问某个缓存时不存在,会快速返回,避免缓存和DB挂掉布隆过滤器。会员轮播抽奖需要抽奖程序,仅对会员用户有效。通过GoogleBloom过滤器存储会员数据。当程序启动时,数据将被存储。放入内存,google会自动创建布隆过滤器。用户ID进来后会判断是不是会员码。实现会引入依赖
