返回顶部
首页 > 资讯 > 精选 >Redis分布式缓存怎么实现微信抢红包
  • 210
分享到

Redis分布式缓存怎么实现微信抢红包

2023-06-22 00:06:45 210人浏览 薄情痞子
摘要

本篇内容主要讲解“Redis分布式缓存怎么实现微信抢红包”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis分布式缓存怎么实现微信抢红包”吧!一、场景分析微信抢红包已经在我们生活中很常见的场

本篇内容主要讲解“Redis分布式缓存怎么实现微信抢红包”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习Redis分布式缓存怎么实现微信抢红包”吧!

一、场景分析

微信抢红包已经在我们生活中很常见的场景了,特别是年底公司开年会和春节2个时间段,长辈领导都发红包,手都点抽筋了,也没抢到多少。

在这段时间里,对于单个群里的单个红包,qps也是上千的,对于整个微信红包系统,高峰的并发量是上亿的。

高峰的抢红包有3大特点:

  1. 包红包的人多:也就是创建红包的任务比较多,即红包系统是以单个红包的任务来区分,特点就是在高峰期红包任务多。

  2. 抢红包的人更多:当你发红包出去后,是几十甚至几百人来抢你的红包,即单红包的请求并发量大。

  3. 低延迟:当你发现红包时,要越快抢到越开心,所以要求抢红包的响应速度要快,一般1秒响应。

二、技术方案

包红包

先把金额拆解为小金额的红包,例如 总金额1000元,发10个,用户在点保存的时候,就自动拆解为10个随机小红包。

这里的存储就是个难题,多个金额(例如10个小金额的红包)如何存储?

Redis分布式缓存怎么实现微信抢红包

抢红包

高并发的抢红包时核心的关键技术,就是控制各个小红包的操作的原子性。

例如 10个红包在100人的群里被抢,10个红包被抢走一个的同时要红包的库存减1,即剩下19个。在整个过程中抢走一个和红包库存减1个是一个原子操作。

list的pop操作弹出一个元素的同时会自动从队列里面剔除该元素,它是一个原子性操作。

Redis分布式缓存怎么实现微信抢红包

三、案例实战

包红包

    @GetMapping(value = "/set")    public long setRedpacket(int total, int count) {        //拆解红包        Integer[] packet= this.splitRedPacket(total,count);        //为红包生成全局唯一id        long n=this.incrementId();        //采用list存储红包        String key=RED_PACKET_KEY+n;        this.redisTemplate.opsForList().leftPushAll(key,packet);        //设置3天过期        this.redisTemplate.expire(key,3, TimeUnit.DAYS);        log.info("拆解红包{}={}",key,packet);        return n;    }

拆解红包

public  Integer[] splitRedPacket(int total, int count) {    int use = 0;    Integer[] array = new Integer[count];    Random random = new Random();    for (int i = 0; i < count; i++) {        if (i == count - 1)            array[i] = total - use;        else {            // 红包随机金额浮动系数            int avg = (total - use) * 2 / (count - i);            array[i] = 1 + random.nextInt(avg - 1);        }        use = use + array[i];    }    return array;}

抢红包 

        @GetMapping(value = "/rob")    public int rob(long redid,long userid) {        //第一步:验证该用户是否抢过        Object packet=this.redisTemplate.opsForHash().get(RED_PACKET_CONSUME_KEY+redid,String.valueOf(userid));        if(packet==null){            //第二步:从list队列,弹出一个红包            Object obj=this.redisTemplate.opsForList().leftPop(RED_PACKET_KEY+redid);            if(obj!=null){                //第三步:抢到红包存起来                this.redisTemplate.opsForHash().put(RED_PACKET_CONSUME_KEY+redid,String.valueOf(userid),obj);                log.info("用户={}抢到{}",userid,obj);                //TODO 异步把数据落地到数据库上                                return (Integer) obj;            }            //-1 代表抢完            return -1;        }        //-2 代表已抢        return -2;    }

到此,相信大家对“Redis分布式缓存怎么实现微信抢红包”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Redis分布式缓存怎么实现微信抢红包

本文链接: https://lsjlt.com/news/301732.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Redis分布式缓存怎么实现微信抢红包
    本篇内容主要讲解“Redis分布式缓存怎么实现微信抢红包”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis分布式缓存怎么实现微信抢红包”吧!一、场景分析微信抢红包已经在我们生活中很常见的场...
    99+
    2023-06-22
  • Redis分布式缓存:微信抢红包解决方案
    目录一、场景分析二、技术方案三、案例实战一、场景分析 微信抢红包已经在我们生活中很常见的场景了,特别是年底公司开年会和春节2个时间段,长辈领导都发红包,手都点抽筋了,也没抢到多少。 ...
    99+
    2024-04-02
  • Python+Appium实现自动抢微信红包
    目录环境准备实现思路code环境准备 appium环境 安卓手机 usb数据线 python环境 实现思路 我们收到红包和消息都是自动置顶到第一个,于是我们打开第一个判断是否有红...
    99+
    2022-06-02
    Python 抢微信红包 Python+Appium 抢红包
  • Android AccessibilityService实现微信抢红包插件
    在你的手机更多设置或者高级设置中,我们会发现有个无障碍的功能,很多人不知道这个功能具体是干嘛的,其实这个功能是为了增强用户界面以帮助残障人士,或者可能暂时无法与设备充分交互的人...
    99+
    2022-06-06
    插件 抢红包 Android
  • redis分布式缓存实现
    第一:Redis 是什么?Redis是基于内存、可持久化的日志型、Key-Value数据库 高性能存储系统,并提供多种语言的API.第二:出现背景数据结构(Data Structure)需求越来越多, 但memcache...
    99+
    2023-06-03
  • Android实现微信自动抢红包的程序
     简单实现了微信自动抢红包的服务,原理就是根据关键字找到相应的View, 然后自动点击。主要是用到AccessibilityService这个辅助服务,基本可以满足自...
    99+
    2022-06-06
    自动 程序 抢红包 Android
  • Java实现微信抢红包算法有哪些
    这期内容当中小编将会给大家带来有关Java实现微信抢红包算法有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。概述14年微信推出红包功能以后,很多公司开始上自己的红包功能,到现在为止仍然有很多红包开发的...
    99+
    2023-06-22
  • android 微信抢红包工具AccessibilityService实现详解
    目录1、目标2、实现流程1、流程分析(这里只分析在桌面的情况)2、实现步骤1、收到通知 以及 点击通知栏2、点击红包3、点击开红包4、退出红包详情页3、遇到问题4、完整代码MyNot...
    99+
    2023-02-07
    android AccessibilityService android 微信抢红包工具
  • 如何实现redis分布式缓存
    摘要: 第一:Redis 是什么? Redis是基于内存、可持久化的日志型、Key-Value数据库 高性能存储系统,并提供多种语言的API. 第二:出现背景 数据结构(Data Structure)需求越...
    99+
    2024-04-02
  • 基于Redis缓存怎么实现分布式锁
    本篇内容介绍了“基于Redis缓存怎么实现分布式锁”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是分布式锁首先我们先来简单了解一下什么是...
    99+
    2023-06-19
  • Redis分布式缓存与秒杀怎么实现
    本篇内容介绍了“Redis分布式缓存与秒杀怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、单点Redis的问题数据丢失问题Redi...
    99+
    2023-07-05
  • Android中微信抢红包助手的实现详解
    实现原理 通过利用AccessibilityService辅助服务,监测屏幕内容,如监听状态栏的信息,屏幕跳转等,以此来实现自动拆红包的功能。关于AccessibilitySe...
    99+
    2022-06-06
    抢红包 Android
  • Python+Appium实现自动抢微信红包的方法
    这篇文章将为大家详细讲解有关Python+Appium实现自动抢微信红包的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。环境准备appium环境安卓手机usb数据线python环境实现思路我们收到红包...
    99+
    2023-06-15
  • Java实现4种微信抢红包算法(小结)
    目录概述 一、剩余金额随机法 二、二倍均值法(微信红包采用此法) 三、整体随机法 四、割线法 概述 14年微信推出红包功能以后,很多公司开始上自己的红包功能,到现在为止仍然有很多红...
    99+
    2024-04-02
  • SpringBoot使用Redis实现分布式缓存
    目录springboot使用Redis实现分布式缓存Redis实现主从复制Redis集群的构建 springboot使用Redis实现分布式缓存 1、环境构建 ​ 1.1 ...
    99+
    2023-05-14
    Java Springboot使用Redis分布式缓存 Redis分布式缓存 Springboot分布式缓存
  • Android微信自动抢红包插件优化和实现
    又是兴趣系列 网上有很多自动强红包的例子和代码,笔者也是做了一些优化。 先说说自己的两个个优势 1.可以在聊天界面自动强不依赖于通知栏推送 2.可以在屏幕熄灭的时候的时候点亮...
    99+
    2022-06-06
    自动 插件 抢红包 优化 Android
  • 教你一步步实现Android微信自动抢红包
    本文介绍微信自动抢红包的实现方法,主要实现以下几个功能:       1.自动拆开屏幕上出现的红包   ...
    99+
    2022-06-06
    自动 抢红包 Android
  • Android微信抢红包功能的实现原理浅析
    快到过农历年了,微信红包也越来越多了,出现了好多红包外挂程序,就很好奇如何实现的,于是自己研究了一番,亲自写了个微信抢红包的APP。现在就一步一步来实现它。 实现思路 微信抢红...
    99+
    2022-06-06
    抢红包 Android
  • ehcache怎么实现分布式缓存
    要实现分布式缓存,可以使用Ehcache的Terracotta插件。Terracotta是一个开源的分布式缓存解决方案,可以与Ehc...
    99+
    2023-08-26
    ehcache
  • redis 分布式缓存实战-redis 事务
    redis 分布式缓存实战-redis 事务   1.描述    redis 事务单独的隔离操作:事务中的所有命令都会序列化、按顺序执行。事务在执行过程中,不会被其他客户端发送过来的命令请求所打断。   redis 事务没有隔离级...
    99+
    2017-03-11
    redis 分布式缓存实战-redis 事务
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作