精华内容
下载资源
问答
  • 历经半个多月的时间,Debug呕心沥血、亲自录制的“缓存中间件Redis技术入门与应用场景实战(SpringBoot2.x + 抢红包系统设计与实战)”的新课终于完成了,顾名思义,这是一门关于目前相当流行的分布式缓存中间件Redis...

    历经半个多月的时间,Debug呕心沥血、亲自录制的“缓存中间件Redis技术入门与应用场景实战(SpringBoot2.x + 抢红包系统设计与实战)”的新课终于完成了,顾名思义,这是一门关于目前相当流行的分布式缓存中间件Redis相关技术栈的介绍与实战,目的在于带领各位小伙伴一起学习、攻克Redis,更好地巩固自己的核心竞争力,跳槽涨薪自然不在话下!

    核心技术列表

    值得介绍的是,本课程在技术层面涵盖了中间件Redis的相关技术栈,比如数据结构String、List、Set、SortedSet以及Hash等等,除此之外,在设计并实战“抢红包系统”以及实战各种数据结构对应的应用场景期间,也使用了微服务、分布式相关的技术。包括SpringBoot2.x、Mybatis、热部署工具、二倍均值法、多线程并发编程、发送邮件等等,详细如下图所示:

    cf884f9ad07b68c15c6865e43f8d0338.png

    课程详细内容

    正如字面上的意思,本门课程主要讲解的是缓存中间件Redis的相关技术栈及其典型应用场景的实战,其中涉及到的相关技术栈的代码实战主要是基于SpringBoot2.x搭建的企业级多模块项目进行实战实现的!

    在课程的最后,Debug还带领各位小伙伴设计并实战了一个“仿微信”的抢红包系统,体验了一个系统是如何从业务流程的介绍、分析,到业务模块的划分、系统架构搭建、数据库设计,最后到实际的后端编码开发、压力测试等等一系列的流程!


    其课程目录截图如下所示(详细的课程目录可以参见文末!):

    d735dc09111eea996c0c36a3c62425ed.png

    值得一提的是,本课程所分享的所有内容几乎是来自于下方这张图所罗列出来的,如图所示:

    c704b6ccb32a818a47b406a50e6a8461.png

    下面罗列一下比较典型的数据结构对应的实际业务场景的实战。首先是列表List的典型应用场景的实战,下图为列表List在充当“队列”的角色时所起到的作用,即“队列广播消息通知”:

    e4f4bab1f4b72a04e7d739b49d80b46e.png

    然后是集合Set的典型应用场景,在这里我们以“获取随机不重复的数据”为案例进行实战,如下图所示:

    8c1f31d206710b96422f340d1dc9c6d5.png

    除此之外,我们还讲解并实战了包括“缓存穿透”、“缓存击穿”、“缓存雪崩”和“热点数据失效”等典型的应用场景,对于面试、跳槽、涨薪而言将是一个好帮手!

    最后,我觉得需要重点介绍一下的是课程所介绍的“抢红包系统的设计与实战”。这一系统的设计与后端编码实现部分可以说是将整个课程推向了高潮,真正的将Redis的相关技术栈应用到了该系统的开发中,下图为抢红包系统的整体业务流程图:

    647bf64c70d5dfea2bcdb530c33b934f.png

    我们的系统架构设计、数据库设计以及后端编码实战实现将全程以这此图作为指导,一步一个脚印地实战整个抢红包系统,真正将技术学以致用!

    课程收益

    1. 掌握Java分布式缓存中间件Redis的相关开发技术栈,包括String、List、Set、SortedSet、Hash等等!
    2. 学以致用,将Redis常见的、典型的相关技术栈与常见的、典型的业务场景相结合,并将其进行内化!
    3. 基于Spring Boot2.x搭建的企业级项目整合Redis,并将Redis与实际的业务场景,如缓存击穿、缓存穿透、缓存雪崩相结合,实践Redis在实际开发中的作用;
    4. 以一个实际的系统 ”抢红包系统的设计与实战“为例,一来学习如何对一个系统的业务流程进行剖析、数据库设计、编码开发等流程;二来是以Redis作为主流的核心技术,将其应用至系统的相关业务上。
    cf884f9ad07b68c15c6865e43f8d0338.png

    课程目录(共56个课时)

    一、课程整体介绍

    1-1课程整体介绍

    1-2核心技术列表与课程收益

    1-3课程学习要求、工具、语言

    1-4 Redis简介与典型应用场景介绍

    1-5 Redis的安装与常用命令使用

    二、微服务SpringBoot2.x项目的搭建

    2-1 SpringBoot2.x搭建Maven多模块项目

    2-2小插曲之引入热部署工具Devtools

    2-3 SpringBoot2.x整合Redis与注入自定义操作组件

    2-4 建立统一的响应数据格式与HelloWorld

    三、Redis典型数据结构及其应用场景实战

    3-1字符串String~简介与常用api实战

    3-2字符串String~存储对象信息实战一

    3-3字符串String~存储对象信息实战二

    3-4列表List~简介与常用api实战

    3-5列表List~场景实战一之商户商品列表有序存储一

    3-6列表List~场景实战一之商户商品列表有序存储二

    3-7列表List~场景实战二之消息队列通信

    3-8列表List~实战插曲之多线程编程实战发送邮件一

    3-9列表List~实战插曲之多线程编程实战发送邮件二

    3-10集合Set~简介与常用api实战

    3-11集合Set~场景实战一之用户注册重复提交

    3-12集合Set~场景实战二之获取随机问题进行评价

    3-13集合Set~场景实战三之获取随机乱序的试卷题目

    3-14集合Set~场景实战总结

    3-15有序集合SortedSet~简介与常用api实战

    3-16有序集合SortedSet~场景实战一之话费充值排行榜

    3-17有序集合SortedSet~场景实战二之再谈充值排行榜

    3-18有序集合SortedSet~场景实战三之优化总结充值排行榜

    3-19哈希Hash~简介与常用api实战

    3-20哈希Hash~场景实战之数据字典实时触发存储一

    3-21哈希Hash~场景实战之数据字典实时触发存储二

    3-22哈希Hash~其他业务场景介绍

    3-23其他数据类型介绍以及如何失效Key

    四、Redis典型应用场景实战

    4-1 典型应用场景实战之缓存穿透介绍

    4-2 典型应用场景实战之缓存穿透解决方案一

    4-3 典型应用场景实战之缓存穿透解决方案二~限流

    4-4 典型应用场景实战之缓存穿透其他解决方案介绍

    4-5 典型应用场景实战之缓存击穿介绍

    4-6 典型应用场景实战之缓存击穿解决方案

    4-7 其他典型应用场景简介之缓存雪崩与热点数据失效

    五、抢红包系统设计与实战

    5-1系统整体业务流程介绍与分析

    5-2 数据库表设计与系统环境搭建

    5-3 “红包金额”随机生成算法之二倍均值法

    5-4 发红包业务模块代码实战

    5-5 抢红包业务模块代码实战一

    5-6 抢红包业务模块代码实战二

    5-7 抢红包业务模块代码实战三

    5-8 JMeter压测接口并对问题进行分析

    5-9 基于Redis分布式锁实战解决并发安全问题

    5-10 其他解决方案介绍

    5-11 小作业之如何处理没有被抢完的红包金额

    5-12 总结与不足之处介绍

    六、Redis扩展介绍

    6-1 基于@Cacheable等注解实现缓存功能一

    6-2 基于@Cacheable等注解实现缓存功能二

    6-3 Redis集群简介

    6-4 SpringBoot不同版本应用Redis的区别

    七、总结

    7-1 课程总结与建议

    试看视频

    1-1 SpringBoot2.0缓存中间件Redis技术入门与实战 课程整体介绍

    彩蛋来了

    本课程属于收费课程(毕竟是Debug呕心沥血亲自撸出来的),私信Debug并发送暗号“11redis”咨询课程详情和相关福利哦~

    购买本课程的小伙伴将获得本课程完整的视频教程、系统源代码数据库、PPT以及其他相关的工具跟资料(不感兴趣的小伙伴可以直接跳过),并拉小伙伴进专属技术交流群,课程学习期间有任何问题都可以留言与Debug进行交流!

    最后,希望大家拿到本视频教程以及资料后,可以静下心来学习、研究、撸码与实战,Debug相信学习完本课程之后,将能更好地巩固诸位小伙伴在微服务、分布式以及中间件和项目实战方面的知识体系,尤其是在企业级应用开发中将可以胜任诸多开发任务(涨薪我觉得应用木有啥问题了!)

    而且,学习本课程后,也能给诸位小伙伴的简历、面试提供一些帮助哦!还等什么呢,赶紧来撩Debug吧!

    展开全文
  • ThinkPHP微信独立精彩互换抢红包系统源码开源版内附安装说明
  • java抢红包系统.rar

    2021-03-09 14:38:46
    抢红包为例,假设有一个20万的红包分成2万个,模拟5万个用户同时抢红包,实现一个高并发的场景。在此场景中,线程每一步的顺序不一样,容易导致数据的一致性问题。例如:红包中剩余金额也就为0了,但是一些线程在...
  • 文章目录Redis练习-模拟一个抢红包系统1.需求描述2.新建红包3.抢红包 Redis练习-模拟一个抢红包系统 前面学习过 Redis 的一些基础知识,为了达到学以致用的目的,加深和巩固对 Redis 的理解,这篇文章模拟微信抢红包...

    Redis练习-模拟一个抢红包系统

    前面学习过 Redis 的一些基础知识,为了达到学以致用的目的,加深和巩固对 Redis 的理解,这篇文章模拟微信抢红包,设计一个简单的抢红包系统。

    1.需求描述

    • 应用场景描述
    • 假设某微信群有:10000
    • 某土豪发红包: 1000
    • 红包个数: 10
    • 分配规则:发 1000 元,随机分成 10 个红包
    • 红包过期时间 24 小时
    • 新建红包规则
      自定义红包个数范围 1~100 个 ,金额范围 0.01~1000 元,红包留言备注字符自定义长度 0~25

    2.新建红包

    • 确定新建红包表字段
    字段名称类型和长度含义
    idint(11)自增主键
    uuidvarchar(100)UUID
    total_amountint(11)红包总金额,单位分
    total_packetsmallint(5)红包总个数
    residue_amountint(11)剩余红包总金额,单位分
    residue_packetsmallint(5)剩余红包个数
    user_idbigint(20)用户ID
    remarkvarchar(25)红包留言
    created_atint(11)创建时间(时间戳)
    updated_atint(11)更新时间(时间戳)
    • 建表语句
    CREATE TABLE `red_packet_record` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `uuid` varchar(100) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT 'UUID',
      `total_amount` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '红包总金额,单位分',
      `total_packet` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '红包总个数',
      `residue_amount` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '剩余红包金额,单位分',
      `residue_packet` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '剩余红包个数',
      `user_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '新建红包用户ID',
      `remark` varchar(25) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '红包留言',
      `created_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '红包创建时间',
      `updated_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '红包更新时间',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    
    • 接口路由定义
    $api->group(['middleware' => 'auth:user'], function ($api) {
    	$api->post('test', 'TestController@addRedPacket');
    }
    
    • 控制器方法定义
        /**
         * 新建红包
         * @param Request $request
         * @return mixed
         */
        public function addRedPacket(Request $request)
        {
            //数据校验
            $this->sceneValidate((new RedPacketValidate())->scene('add-red-packet'));
    
            $redPacketService = new RedPacketService();
            $redPacketService->setUser($this->user())
                             ->addRedPacket($request)
                             ->allot()
                             ->inform();
    
            return $this->success("创建成功");
        }
    

    Tips: 其中 addRedPacket() 表示新建红包入库逻辑,allot() 表示红包分配并丢进 Redis list 中,inform() 表示通知客户端可以开始抢红包了。

    • 接口数据校验
        /**
         * 定义数据验证规则
         * @var array
         */
        protected $rule = [
            'total_amount'    => 'required|numeric|between:0.01,1000',
            'total_packet' => 'required|integer|between:1,100',
            'remark' => 'max:25',
        ];
        /**
         * 定义数据验证错误提示
         * @var array
         */
        protected $message = [
            'total_amount.required'    => '红包金额不能为空',
            'total_amount.numeric'     => '红包金额必须是数字',
            'total_amount.between'     => '红包总金额范围必须是0.01~1000元之间',
            'total_packet.required'    => '红包数量不能为空',
            'total_packet.integer'     => '红包数量必须是整数',
            'total_packet.between'     => '红包数量范围必须是1~100之间',
            'remark.max'               => '红包留言字符长度不能超过25',
        ];
        /**
         * 定义数据验证场景
         * @var array
         */
        protected $scene = [
            'add-red-packet' => ['total_amount', 'total_packet', 'remark']
        ];
    
    • 新建红包入库逻辑
        public function addRedPacket(Request $request){
            $total_amount = (float) $request->input("total_amount");
            $total_packet = (int) $request->input("total_packet");
            try{
                $redPacket = new RedPacketRecord();
                $redPacket->uuid = uuidCode();
                $redPacket->total_amount = $total_amount * 100;
                $redPacket->total_packet = $total_packet;
                $redPacket->residue_amount = $total_amount * 100;
                $redPacket->residue_packet = $total_packet;
                $redPacket->user_id = 88;//这里需要用户登录才有信息,为了验证方便直接写死
                $redPacket->remark = (string) $request->input("remark");
                $redPacket->created_at = YouDate::now()->getTimestamp();
                $redPacket->save();
            }catch(\Exception $exception){
                throw new ValidatorException("创建红包失败");
            }
        }
    
    • 红包分配逻辑
        /**
         * 分配红包数量和金额丢进 redis
         * @return $this
         */
        public function allot(){
            $data = [];
            $n = $this->redPacket->total_packet;
            for ($i = 0;$i < $n;$i++){
                //平均值
                $ave = $this->redPacket->total_amount/$this->redPacket->total_packet;
    
                $randAmount = mt_rand(1,$ave * 2);
                $data[] = $randAmount;
    
                $this->redPacket->total_amount = $this->redPacket->total_amount - $randAmount;
                $this->redPacket->total_packet--;
            }
    
            //把分配好的红包金额丢进 Redis list
            $redList = Redis::lpush("ADD_RED_".$this->redPacket->user_id."_".$this->redPacket->uuid,$data);//将红包丢进 list 里面,准备后面的用户抢
            if(!$redList){
                //若操作 redis 失败,实施重试机制,处理相关退款逻辑
                //若重试多次 throw new ValidatorException("红包发起失败");
            }
    
            return $this;
        }
    
    • 通知客户端
        /**
         * 通知客户端开始抢红包
         */
        public function inform(){
            //通知用户可以开始抢红包了,下面是伪代码
            //send::clien("ADD_RED_".$this->redPacket->user_id."_".$this->redPacket->uuid);
            return $this;
        }
    

    3.抢红包

    需要判断红包是否已经抢完,然后限制同一个用户最多只能抢到一个红包:

    • 确定用户抢红包表字段
    字段名称类型和长度含义
    idint(11)自增主键
    uuidvarchar(100)红包的UUID
    amountint(11)红包金额,单位分
    user_idbigint(20)用户ID
    created_atint(11)创建时间(时间戳)
    • 建表语句
    CREATE TABLE `red_packet_user` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `uuid` varchar(100) CHARACTER SET utf8mb4 NOT NULL DEFAULT '' COMMENT '红包的UUID',
      `amount` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '红包金额',
      `user_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '抢到红包的用户ID',
      `remark` varchar(25) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '红包留言',
      `created_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '抢到红包时间',
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
    
    • 接口路由定义
        $api->get('test', 'TestController@getRedPacket');
    
    • 控制器方法定义
        /**
         * 抢红包接口
         * @param Request $request
         */
        public function getRedPacket(Request $request){
            $redPacketToken = $request->input("red_packet_token");//红包标识,这个会在发起红包时通知客用户
            if(!$redPacketToken){
                throw new ValidatorException("验证参数不能为空");
            }
    
            $redPacketService = new RedPacketService();
    
            $redPacketUser =  $redPacketService->setUser($this->user())
                             ->setRedPacketToken($redPacketToken)
                             ->isStart()
                             ->statNum()
                             ->getRedPacket();
    
            return $this->success($redPacketUser->amount);
        }
    

    Tips: 其中 isStart() 表示判断红包是否被抢空或该用户是否已经抢过,statNum() 表示统计参与抢红包人数,getRedPacket() 表示抢红包入库逻辑。

    • 判断红包是否被抢空或该用户是否已经抢过
        /**
         * 判断红包是否被抢空&该用户是否已经抢过
         */
        public function isStart(){
            //判断红包是否还有
            if(!Redis::exists($this->redPacketToken) || !Redis::llen($this->redPacketToken)){
                throw new ValidationException("红包已抢光");
            }
    
            //判断该用户是否已经抢过,需要登录
            if(Redis::getbit($this->redPacketToken."_BIT",$this->user->id) == 1){
                throw new ValidationException("该用户已经抢过,不能再抢");
            }
            return $this;
        }
    

    Tips: 其中已经抢过红包的用户 ID 会在 bitmap 中记录。

    • 统计参与用户数
        /**
         * 统计累计参与人数
         */
        public function statNum(){
            Redis::pfadd($this->redPacketToken."_COUNT",$this->user->id);//需要用户登录
            return $this;
        }
    
    • 抢红包逻辑
        /**
         * 用户从 Redis list 取出红包,并操作 db
         * @return $this
         */
        public function getRedPacket(){
            //从红包列队里边取出红包金额,并备份至hash里面
            $amount = Redis::rpop($this->redPacketToken);
            //备份至 hash 里面
            if(!Redis::hset($this->redPacketToken."_BAK",$this->user->id,$amount)){
                //若操作 redis 失败,实施重试逻辑
            }
    
            DB::beginTransaction();
            try{
                $redPacket = RedPacketRecord::where('uuid',$this->redPacketToken)->lockForUpdate()->first();//这里必须要加一个锁,若果不加锁可能当前读造成影响
    
                $redPacketUser = new RedPacketUser();
                $redPacketUser->uuid = $redPacket->uuid;
                $redPacketUser->amount = $redPacket->uuid;
                $redPacketUser->user_id = $this->user->id;
                $redPacketUser->created_at = YouDate::now()->getTimestamp();
                $redPacketUser->save();
    
                $redPacket->residue_packet--;
                $redPacket->residue_amount = $redPacket->residue_amount - $amount;
                $redPacket->updated_at = YouDate::now()->getTimestamp();
                $redPacket->save();
                DB::commit();
            }catch(\Exception $exception){
                DB::rollBack();
                Redis::lpush($this->redPacketToken,$amount);//丢回到list让别人抢
                if(!Redis::hdel($this->redPacketToken."_BAK",$this->user->id)){
                    //若操作 redis 失败,实施重试逻辑
                }
                throw new ValidationException("抢红包失败");
            }
            //成功之后将用户标记为已抢
            Redis::setbit($this->redPacketToken."_BIT", $this->user->id,1);
            return $redPacketUser;
        }
    

    扫码关注
    在这里插入图片描述

    展开全文
  • 抢红包为例,假设有一个20万的红包分段2万个,模拟5万个用户同时抢红包,实现一个高并发的场景。在此场景中,线程每一步的顺序不一样,容易导致数据例如:红包中剩余金额也就为0了,但是一些线程在剩余金额变0之前...
  • 提到抢红包,就不得不提Xposed框架,它简直是个抢红包的神器,但使用Xposed框架有一个前提条件:手机需要root,对于苹果手机的话就需要越狱了。现在的手机想要root或越狱并不容易,同时这会对手机安全性带来一些风险...

     

    目录


     

    0 引言

    提到抢红包,就不得不提Xposed框架,它简直是个抢红包的神器,但使用Xposed框架有一个前提条件:手机需要root,对于苹果手机的话就需要越狱了。现在的手机想要root或越狱并不容易,同时这会对手机安全性带来一些风险,抢红包本身只是个娱乐活动,这样做就得不偿失了。

    为了自动抢红包,python能帮我们实现吗?

    答案是肯定的,本文就带大家一起探索下用Python如何实现自动抢红包。

    1 环境

    操作系统:Windows

    Python版本:3.7.2

    手机系统:Android

    2 需求分析

    这里我们的需求是实现自动抢红包。首先要打开微信,进入到指定的群聊,识别微信红包、执行抢红包的动作。这就是关键的步骤,简单清晰。

    因为电脑版本的微信没有抢红包的功能,我们只能手机微信,那么就需要把手机连上电脑,通过电脑控制手机来自动抢,那就需要确保「adb」命令可正常执行。

    识别微信中的消息,是红包还是普通的信息,这里我们通过聊天消息的元素标识来判断。这里我们借助了「Airtest IDE」工具来实现。

    3 前置准备

    3.1 打开手机的USB调试

    要正常使用「adb」需要打开USB调试,设置项通常出现在手机系统设置中的[开发人员选项]里面。

    在手机上打开USB调试后,接下来我们通过Airttest IDE验证 adb 运行是否正常。

    3.2 下载安装Airtest IDE

    开始之前先,先解释下airttest相关概念:

    Airtest 是一个跨平台的、基于图像识别的UI自动化测试框架,适用于游戏和App,支持平台有Windows、Android和iOS。

    Poco是一款基于UI控件识别的自动化测试框架,目前支持Unity3D/cocos2dx-*/Android原生app/iOS原生app/微信小程序,也可以在其他引擎中自行接入poco-sdk来使用。

    AirtestIDE 是一个我们配套推出的跨平台的UI自动化测试编辑器,内置了Airtest和Poco的相关插件功能,能够使用它快速简单地编写脚本。

    Airtest IDE 的下载地址:http://airtest.netease.com/

    下载之后,解压打开就可以使用,Airtest IDE的界面如下:

    使用AirtestIDE对Android应用进行自动化操作,第一步就需要连接Android设备。

    1. 请使用USB线连接手机,手机上出现的 允许USB调试 弹窗,点击 确定

    2. 点击连接面板中的 refresh ADB 按钮,设备列表将会刷新。

    3. 点击列表内对应设备的 Connect 完成连接。

    4. 若设备未刷出,点击 refresh ADB 按钮。

     

    若连接遇到问题,请参考Airtest的官方教程:Android真机连接

    4 抢红包流程回顾

    打开微信,在最左侧的Tab页,微信消息列表,我们需要从这里选择指定的群聊来抢红包。

     

    在AirtestIDE中,我们可以通过暂停功能,冻结当前的UI树形结构来精确地检视UI控件,我们先来分析下这个页面中元素标识。

    ▲聊天页面中整体的群聊消息的元素标识 com.tencent.mm:id/d1v

     

    ▲聊天页面中单个群聊消息的元素标识 com.tencent.mm:id/b6e

    接下来进入我们准备要抢红包的群聊中,识别出红包并执行抢红包的动作。

    我们先来看看红包的标识:

    ▲红包标识的示例1 com.tencent.mm:id/aql

    ▲红包标识的示例2  com.tencent.mm:id/aql

    点击红包,记录下弹出的大红包页面中“开”的元素标识

    ▲大红包页面中”开“的标识 com.tencent.mm:id/d02

    这里我们需要判断是红包是否有效,比如已被领完或是已被自己领取的红包就是无效的,我们在执行时可以跳过这些。

    ▲已领取红包的标识 com.tencent.mm:id/apk

    ▲已被领完红包的标识 com.tencent.mm:id/apk

    我们用的各元素的标识都已取到,接下来就是组织我们的代码。

    5 代码梳理

    首先得打开微信,利用Airtest启动app应用,只须一行代码即可搞定,如下

    # 打开手机微信
    poco(text='微信').click()
    

    获取当前页面中所有所有群聊的名称

    # 群聊消息的元素标识
    Chat_msg = poco(name='com.tencent.mm:id/d1v').offspring('com.tencent.mm:id/b6e')
    # 获取当前页面中所有群聊的名称
    Chat_names = []
    Chat_names = list(map(lambda x: x.get_text(), Chat_msg))
    

    选择并进入指定的群聊

    # 指定抢红包的群聊名称
    chat = input('请指定群聊名称:')
    if chat in Chat_names:
        index = Chat_names.index(chat)
        # 点击进入指定的群聊
        Chat_msg[index].click()
    

    在微信聊天页面中,获取当前页面中的所有消息元素。

    msg_list = poco("android.widget.ListView").children()
    

    遍历消息并查找红包

    for msg in msg_list:
        # 微信红包的标识
        LuckyMoney = msg.offspring('com.tencent.mm:id/aql')
        # 已失效红包(比如已领取、已被领完)的标识
        Invalid = msg.offspring('com.tencent.mm:id/aqk')
    
        # 判断红包是否有效并抢起来!
        if LuckyMoney:
            pass
    

    在LuckyMoney中定义抢红包的动作

    if Invalid.exists() and (Invalid.get_text()=='已领取' or Invalid.get_text()=='已被领完'):
        print(f'红包已无效,跳过……')
        continue
    else:
        print(f'发现一个新红包,抢起来!')
        poco("com.tencent.mm:id/d1v")
        msg.click()
    
        click_open = poco("com.tencent.mm:id/d02")
        if click_open.exists():
            click_open.click()
        keyevent('BACK')
    

    6 后记

    若我们在一台电脑上并不想安装Airtest IDE,还能执行这个脚本吗?

    当然可以,只需要安装好「pocoui」这个第三方库就可以“抛弃”它了!

    pip install pocoui

    利用 AirtestIDE 创建一个项目时,设备类型选中 Android,就会在编码区生成一段初始化的代码。

    from airtest.core.api import *
    auto_setup(__file__)
    
    from poco.drivers.android.uiautomation import AndroidUiautomationPoco
    poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
    

     

    我们自己编写的Python代码中也需要加上这段初始化的代码。 

    再次强调,在执行脚本时要确保手机连上电脑,并确保「adb」命令正常运行。

    另外本人还开设了个人公众号:JiandaoStudio ,会在公众号内定期发布行业信息,以及各类免费代码、书籍、大师课程资源。

     

                                                

    扫码关注本人微信公众号,有惊喜奥!公众号每天定时发送精致文章!回复关键词可获得海量各类编程开发学习资料!

    例如:想获得Python入门至精通学习资料,请回复关键词Python即可。

    展开全文
  • 值得介绍的是,本课程在技术层面涵盖了中间件Redis的相关技术栈,比如数据结构String、List、Set、SortedSet以及Hash等等,除此之外,在设计并实战“抢红包系统”以及实战各种数据结构对应的应用场景期间,也使用了...
  • GO从0到1实战微服务版抢红包系统想必大家对“双十一”、“6.18”秒杀活动有高并发性能的直观感受, “抢红包” 在高并发上比“秒杀”更经典 ,与Golang更契合。致敬经典,开启从0到1实战抢红包系统学习之旅:从基础...

    GO从0到1实战微服务版抢红包系统

    想必大家对“双十一”、“6.18”秒杀活动有高并发性能的直观感受, “抢红包” 在高并发上比“秒杀”更经典 ,与Golang更契合。致敬经典,开启从0到1实战抢红包系统学习之旅:从基础逻辑设计到编程实操,到性能分析找到瓶颈,按架构演进迭代系统。想在企业中彰显能力,等你来打Cal

    第1章 课程导学【征途*扬帆起航】

    没有梦想,何必远方?本小结将站在更高的起点,从项目演示开始 ,然后到本课程适用人群定位,再到通过思维导图介绍课程内容体系,接着到分析收获,最后到学习本课程的一些前置要求,为你的学习征途扬帆起航做保证。

    1-1 抢红包系统项目演示&导学【不看错过一个亿唷】 试看

    第2章 红包业务概述&系统建模【磨刀不误砍柴工】

    或许大家体验过抢红包,但如何对现实世界的业务场景进行抽象,形成软件系统的需求,进行建模与技术选型,这是有一套“方法论”的。因此,本章分四点:红包系统业务知识;选用的技术框架;业务建模与数据库建模;红包算法&库存超卖问题。…

    2-1 课程源码分支简介【为你的便捷学习考虑】

    2-2 红包业务和业务模型概述【软件建模适用于有远大追求的人】 试看

    2-3 红包数据库表结构讲解【不得不会的数据库建模】

    2-4 红包算法概述【让算法彰显你的内功修为】

    2-5 红包系统中负库存负金额的问题【站在长远角度考虑问题】 试看

    2-6 红包系统架构演进概述【此处高能】

    第3章 Golang项目代码架构设计【要远征就要做好规划】

    如果以作战规划比喻本课程学习,那项目的代码架构设计就是作战线路规划。本章从Why、What、How三个维度来介绍代码架构,说明代码架构意义、要做的事、常见的代码分层。从四层架构来阐述每一层职责,最后介绍Go module模块化管理代码工具。…

    3-1 代码架构之why和what

    3-2 代码架构之how-怎样来设计代码架构?

    3-3 代码架构之Go编程中的一些规范【约定优于配置】

    3-4 Go module模块化管理代码依赖

    第4章 Golang基础设施设计和编码实践 【精良的武器助你开战必胜】

    软件项目中的基础设施就像是征战中的神兵利器。本章介绍Golang项目应具备基础设施,完整的业务系统应该需要的基础设施资源,在没有Java Spring全家桶那样的明星级框架情况下,让Golang项目轻松自如管理基础资源的生命周期、构建和使用基础资源。…

    4-1 【重在设计】golang中使用枚举值【Go其实也可以有枚举】

    4-2 【JSON-web编程的宠儿】在golang中使用JSON

    4-3 【设计思维】基础设施层-配置设计

    4-4 【动手实战】基础资源层-配置设计-starter编码

    4-5 【动手实战】基础设施层-配置设计-启动管理器编码

    4-6 【动手编程】基础设施层-mysql Starter编码(上)

    4-7 【动手编程】基础设施层-mysql Starter编码(下)

    4-8 【设计思维】基础实施层-log starter 设计概述

    4-9 【动手实操】基础实施层-log starter 编码

    4-10 【必备理论】基础设施层-验证器validator框架

    4-11 【动手实操】基础设施层-验证器入门编程

    4-12 【动手实操】基础设施层-验证器starter的编程

    4-13 【动手实操】基础设施层-web框架starter的编程-认识iris

    4-14 【动手实操】基础设施层-web框架starter的编程实践-iris框架的使用

    4-15 【动手实操】基础设施层-web框架starter的编程实践

    第5章 【单体应用版】资金账户核心业务开发实践【擒贼先擒王,攻下核心】

    撸起袖子加油干!养兵千日用兵一时,不服,来战~本章将还原企业真实开发场景,按照企业真实的开发场景来开发资金账户,完全遵循“大四层+小六层”代码分层开发,同时贯穿了自动化测试用例和断点调试的一些技巧。

    5-1 资金账户业务流程的设计和讲解

    5-2 资金账户模块数据库表设计讲解

    5-3 资金账户模块-服务接口设计和定义

    5-4 资金账户模块-账户表数据库访问层查询的定义和编码实践

    5-5 资金账户模块-账户表数据库访问层写入和更新的编码实践

    5-6 资金账户模块-账户表账户插入和查询数据库访问层的测试用例编码实战

    5-7 资金账户模块-账户表红包账户查询数据库访问层的测试用例编码实战

    5-8 资金账户模块-账户流水表数据库访问层和测试用例编码实践

    第6章 【并发版】红包核心业务开发实践【越战越勇,出奇制胜】

    攻克此关,胜利的曙光在招手!本章就如同远航的灯塔,一路照亮征途的前程,进一步熟悉和练习核心业务开发,巩固之前的知识,从中掌握事务、乐观锁知识,断点调试代码,让真实企业项目的开发流程和代码分层架构的知识刻在我们的大脑海马体上。…

    第7章 集成测试:确保项目高效稳定运行的“神器 ”【清点战场,收获战果】

    测试的重要性不言而喻,通过web接口功能测试、自动化集成测试、性能测试来评估和验证我们的劳动成果,看看这一程走的如何,知错就改,不要成为“66万漏油的奔驰”。测试工具和测试逻辑同样重要,工具加持下测试更有效率。…

    第8章 Golang项目打包部署【胜利回朝,马上封侯】

    本章介绍Golang项目编译打包、部署、运行、终止,不仅要完成这些事情,还要让这些事尽可能自动化、简单,少量命令和参数即可完成,比如 ./build 完成编译打包,比如.esk.run dev就完成开发环境的启动,原来晶石如此简单的别有洞天。…

    第9章 初探红包系统微服务【追求卓越的人永不止步】

    微服务火遍大江南北,本章从架构演进角度讲解单体应用进化到微服务过程中常见的设计模式和方法,结合红包系统讲微服务的拆分逻辑和方法,并实战红包系统的微服务拆分,工具助力拆分,从中体会和学习微服务拆分技巧、踩坑和填坑渡劫经历。…

    第10章 Http中的服务发现与负载均衡 【晋级红包系统分布式+微服务化】

    此处高能,适用于装逼!本章带着问题实践使用服务发现机制的动态服务调用客户端组件,学习开发微服务基础设施组件,负载均衡和常见的算法,及在服务调用客户端中实践。通过改造拆分后的红包微服务系统,加深对动态服务调用客户端重要的理解。…

    第11章 微服务下分布式配置管理实践【开启红包系统分布式】

    本章带着微服务架构下配置的复杂性和分布式配置管理中心的作用和架构意义,同时了解使用Consul来作为分布式配置中心来存储配置项,学习使用props配置工具从配置文件到配置管理中心的演变;然后把拆分后的红包微服务改造为分布式配置管理。…

    第12章 微服务部署管理实践【落地分布式+微服务版】

    本章来讲解微服务化后的打包程序升级技巧,如何结合分布式配置管理中心,实现一包无环境包的打包和部署、运行的设计和实现技巧。

    第13章 红包系统性能分析实战演示【终点便是起点】

    一入此门深似海,从此红尘是路人!开发之路永远没有尽头。本章通过Golang内建的性能分析工具来演示和讲解给Golang项目做性能分析的过程和方法,让同学们对Golang项目性能分析有个大致的了解。为下一次的项目优化迭代做准备!…

    第14章 课程总结【思维导图助你收获满满】

    本章采用思维导图 ,为你梳理整个课程内容,建立你的知识栈,为你的升职加薪铺平道路,为你的面试跳槽中的项目面试保驾护航、为你的科技竞赛答辩勇夺第一,为你的毕业设计答辩斩获荣耀……

    提取码:7rdv

    展开全文
  • 概要介绍:历经半个多月的时间,Debug呕心沥血、亲自录制的“缓存中间件Redis技术入门与应用场景实战(SpringBoot2.x + 抢红包系统设计与实战)”的新课终于完成了,顾名思义,这是一门关于目前相当流行的分布式缓存...
  • 对于抢红包我想咱们再熟悉不过了,那么如何去实现这个业务呢?咱们这就去探究一下。 业务流程 有人发红包才有抢红包啊,先看一下发红包的业务流程。 好了,发完红包了,那么开始去抢红包了,来解析一下抢红包的...
  • 在2014年春节,微信上线了红包功能,在短短一个月内,微信支付的用户便从3000万激增到1亿...本章我们将借鉴微信红包的部分业务流及红包随机金额生成算法的思想,设计一款能扛住秒级高并发用户流量的抢红包系统。本文...
  • 2,抢红包模块:分成点红包和拆红包模块; 3,数据库模块:发红包记录,抢红包记录,红包详情; 4,redis模块:缓存红包个数和金额; 第一步先构建数据库:创建3个表分别是发红包记录表,抢红包记录表,红包详情表;...
  • 微信支付10块,随机抢红包到账1-100块,这就是精彩互换抢红包模式,吸引了成千上万用户参与抢红包,全新吸粉形式,这种娱乐性的红包模式很受欢迎,现在很多商家都喜欢玩这种模式! 功能介绍: 1、拼手气红包,用户先...
  • 缓存中间件Redis技术入门与应用场景实战(SpringBoot2.x + 抢红包系统设计与实战) ...
  • PHP 学习记录 设计实现抢红包系统

    千次阅读 2016-08-04 19:36:50
    红包管理:发红包、抢红包、红包超时。 二、实体分析。 实体是真实物体或者虚拟物体,但是是有逻辑意义的。 这里设计了几个实体:用户、账户、银行卡、转账记录、红包、小红包、小红包领取记录、充值提现记录。 ...
  • 系统是《分布式中间件技术实战》这本书中的项目案例,本人在自己的环境上进行了搭建实施。... 抢红包业务流程大家肯定都很了解,主要分为“发红包”和“抢红包”两个流程。发红包是由一个人发,然后多个人可...
  • 一、简介:2021已然来临,在互联网内卷的IT行业,及早掌握、巩固Java微服务、分布式领域相关核心技术栈将显得尤为重要,因此在闲暇之际,debug特意录制了一套面向系统架构设计的全套实战课程,话不多说,直接上图: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,100
精华内容 3,240
关键字:

抢红包系统