发红包逻辑及核心代码:

  1. 需要保证红包id的唯一性,此次用的是雪花算法,完全能够保证唯一性,关于分布式事务的唯一性ID,可以给大家推进一篇我写的博客,里面有多种唯一性ID的介绍:https://blog.csdn.net/zhuyanlin09/article/details/91945444
  2. 保证数据一致性,redis和DB的落库要保证一致性,这里写出来了,只是没有去具体实现,这里可以顺序执行,redis的操作进行try...catch...进行保证,做好回滚操作,但是最安全的还是建议使用RocketMQ的消息事务进行保证,或者其他的分布式中间件来保证。
  3. redis设置的多个key需要保证原子性,本人代码没有去具体实现,可以考虑使用lua脚本来做。

核心代码实现:(其他代码我会打包一下文件上传上来供大家下载)

/*** 发红包功能* @param redPacketInfo* @return*/public RedPacketInfo saveRedPacket(RedPacketInfo redPacketInfo){//红包id 来自雪花算法long redPacketId = snowflakeIdWorker.nextId();redPacketInfo.setRedPacketId(redPacketId);redPacketInfo.setCreateTime(new Date());redPacketInfo.setUpdateTime(new Date());redPacketInfo.setRemainingAmount(redPacketInfo.getTotalAmount());redPacketInfo.setRemainingPacket(redPacketInfo.getTotalPacket());try {int count = redPackInfoService.insert(redPacketInfo);if(count>0){//这两操作应该保证原子性,用lua脚本处理最好try {//设置红包数量redisService.set(redPacketId + TOTAL_NUM, redPacketInfo.getRemainingPacket() + "");//设置总金额数量redisService.set(redPacketId + TOTAL_AMOUNT, redPacketInfo.getTotalAmount() + "");}catch (Exception e){logger.error("saveRedPacket redis is error:",e);}}}catch (Exception e){logger.error("saveRedPacket DB is error:",e);throw new BizException(SAVE_ERROR.getMsg());}return null;}

Redis应用项目---抢红包功能(二)相关推荐

  1. Redis应用项目---抢红包功能(四)

    拆红包的核心功能: 拆红包功能是整个功能的核心,红包计算逻辑:剩余金额/剩余红包个数 * 2,这里有个一个点,如果保证剩余金额和剩余红包个数同时等于0,特别是在并发的情况下. 核心代码: public ...

  2. Redis应用项目---抢红包功能(一)

    开篇: 之前也看过一些相关的书籍,最近又在学习redis的相关知识,不过这次偏实战一些,花了几天时间做了一个抢红包的功能,把设计的思路以及最终的源码贴出来给大家分享一下,本人自己自测了一下,能非常清楚 ...

  3. Redis应用项目---抢红包功能(三)

    抢红包逻辑及核心代码: 先判断用户有没有抢过红包,如果没有则进行第二步 判断红包个数,如果>0 则直接返回数量 判断红包金额,如果>0则直接返回金额 核心代码 说明:这里特别需要说明的,r ...

  4. 基于Redis实现微信抢红包功能

    使用Redis和Lua的原子性实现抢红包功能 安装Lua(可选) 编写lua脚本 lua脚本学习可以参考 [https://www.runoob.com/lua/lua-basic-syntax.ht ...

  5. 基于redis实现抢红包功能(包括余额退回处理)

    本文将讲述使用redis实现抢红包功能,采用发红包时将红包拆好存储,解决红包金额平衡问题(两种算法).解决超发现象.将数据通过消息队列传递给另一个服务写入数据库,现阶段不考虑redis宕机的情况. - ...

  6. Redis 牛X!竟然能实现抢红包功能!

    原文链接:https://www.cnblogs.com/chenyanbin/p/13587508.html 为啥写这个微信抢红包项目呢,公司 0202 年 08 月 22 日,公司周年庆,抢了10 ...

  7. 【node.js后台api项目】(二)实现注册功能

    [node.js后台api项目](二)实现注册功能 一.实现思路 二.项目目录 三.代码编写 1.基本代码 2.数据合法性校验 3.注册路由处理函数 4.密码加密 一.实现思路 注册功能简单来说就是提 ...

  8. Redis在项目中的地位及使用场景剖析

    Redis在项目中的地位及使用场景剖析 一. redis 特点 所有数据存储在内存中,高速读写 提供丰富多样的数据类型:string. hash. set. sorted set.bitmap.hyp ...

  9. Redis在项目中的使用及性能测试(续)

    [前言] 在上篇博文<SCPPO:Redis在项目中的使用及性能测试>中小编为大家分享了在程序中引入Redis以及性能的提升,不过遗留了功能的完善以及性能在服务器上的测试,咱们就一鼓作气, ...

最新文章

  1. IplImage 类型和 CvMat 类型转换为 Mat 类型
  2. SpringBoot第二十四篇: springboot整合docker
  3. Android 线程管理
  4. windows 10占用cpu和内存过高
  5. 物联网将迎丛林时代 细数物联网八大发展模式
  6. 让Windows Live Messenger支持多账户登录
  7. 江苏计算机信息录入技师选拔考试题,2010年江苏省机关事业单位工人技师资格选拔考试试卷...
  8. oracle dataguard 03113 error code solution
  9. mongo性能测试demo 代码正确运行
  10. 使用IBM ServerGuide安装操作系统
  11. Kindeditor富文本使用
  12. 程序员应该看的十大电影
  13. ajax401错误,使用jqueryajax捕获401未经授权的http响应
  14. DDIM代码详细解读(1):数据集加载、类别条件信息读取、关键超参数解析
  15. 程序员必备网络基础知识清单,简单易懂
  16. 函数对称性常见公式_函数的对称性的常用结论
  17. Round 1—数据结构基本概念
  18. 1、学习笔记-谁说rookie不会数分(入门篇)
  19. 让IE6/IE7/IE8浏览器支持CSS3属性
  20. 【含源码】用python做游戏有多简单好玩

热门文章

  1. 巴菲特经典演讲《价值投资为什么能够持续战胜市场》
  2. 【Python】解决CNN中训练权重参数不匹配size mismatch for fc.weight,size mismatch for fc.bias
  3. 微信是怎么打造平台型生态商业模式的?
  4. Algorithm Gossp (18) 最大公因数、最小公倍数、因式分解
  5. 微信小程序 实现美团外卖 菜单分类,左右联动 效果
  6. 干货分享 | GopherChina 2019北京大会PPT下载
  7. 图片转成pdf格式怎么转?
  8. python文件操作入门
  9. 小明身高180cm,小刚身高165cm,计算两人的身高差
  10. 服务器装系统引导进去系统usb失灵,重装win7后usb全部失灵原因分析以及解决方法(完美解决)...