Redis应用项目---抢红包功能(二)
发红包逻辑及核心代码:
- 需要保证红包id的唯一性,此次用的是雪花算法,完全能够保证唯一性,关于分布式事务的唯一性ID,可以给大家推进一篇我写的博客,里面有多种唯一性ID的介绍:https://blog.csdn.net/zhuyanlin09/article/details/91945444
- 保证数据一致性,redis和DB的落库要保证一致性,这里写出来了,只是没有去具体实现,这里可以顺序执行,redis的操作进行try...catch...进行保证,做好回滚操作,但是最安全的还是建议使用RocketMQ的消息事务进行保证,或者其他的分布式中间件来保证。
- 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应用项目---抢红包功能(二)相关推荐
- Redis应用项目---抢红包功能(四)
拆红包的核心功能: 拆红包功能是整个功能的核心,红包计算逻辑:剩余金额/剩余红包个数 * 2,这里有个一个点,如果保证剩余金额和剩余红包个数同时等于0,特别是在并发的情况下. 核心代码: public ...
- Redis应用项目---抢红包功能(一)
开篇: 之前也看过一些相关的书籍,最近又在学习redis的相关知识,不过这次偏实战一些,花了几天时间做了一个抢红包的功能,把设计的思路以及最终的源码贴出来给大家分享一下,本人自己自测了一下,能非常清楚 ...
- Redis应用项目---抢红包功能(三)
抢红包逻辑及核心代码: 先判断用户有没有抢过红包,如果没有则进行第二步 判断红包个数,如果>0 则直接返回数量 判断红包金额,如果>0则直接返回金额 核心代码 说明:这里特别需要说明的,r ...
- 基于Redis实现微信抢红包功能
使用Redis和Lua的原子性实现抢红包功能 安装Lua(可选) 编写lua脚本 lua脚本学习可以参考 [https://www.runoob.com/lua/lua-basic-syntax.ht ...
- 基于redis实现抢红包功能(包括余额退回处理)
本文将讲述使用redis实现抢红包功能,采用发红包时将红包拆好存储,解决红包金额平衡问题(两种算法).解决超发现象.将数据通过消息队列传递给另一个服务写入数据库,现阶段不考虑redis宕机的情况. - ...
- Redis 牛X!竟然能实现抢红包功能!
原文链接:https://www.cnblogs.com/chenyanbin/p/13587508.html 为啥写这个微信抢红包项目呢,公司 0202 年 08 月 22 日,公司周年庆,抢了10 ...
- 【node.js后台api项目】(二)实现注册功能
[node.js后台api项目](二)实现注册功能 一.实现思路 二.项目目录 三.代码编写 1.基本代码 2.数据合法性校验 3.注册路由处理函数 4.密码加密 一.实现思路 注册功能简单来说就是提 ...
- Redis在项目中的地位及使用场景剖析
Redis在项目中的地位及使用场景剖析 一. redis 特点 所有数据存储在内存中,高速读写 提供丰富多样的数据类型:string. hash. set. sorted set.bitmap.hyp ...
- Redis在项目中的使用及性能测试(续)
[前言] 在上篇博文<SCPPO:Redis在项目中的使用及性能测试>中小编为大家分享了在程序中引入Redis以及性能的提升,不过遗留了功能的完善以及性能在服务器上的测试,咱们就一鼓作气, ...
最新文章
- IplImage 类型和 CvMat 类型转换为 Mat 类型
- SpringBoot第二十四篇: springboot整合docker
- Android 线程管理
- windows 10占用cpu和内存过高
- 物联网将迎丛林时代 细数物联网八大发展模式
- 让Windows Live Messenger支持多账户登录
- 江苏计算机信息录入技师选拔考试题,2010年江苏省机关事业单位工人技师资格选拔考试试卷...
- oracle dataguard 03113 error code solution
- mongo性能测试demo 代码正确运行
- 使用IBM ServerGuide安装操作系统
- Kindeditor富文本使用
- 程序员应该看的十大电影
- ajax401错误,使用jqueryajax捕获401未经授权的http响应
- DDIM代码详细解读(1):数据集加载、类别条件信息读取、关键超参数解析
- 程序员必备网络基础知识清单,简单易懂
- 函数对称性常见公式_函数的对称性的常用结论
- Round 1—数据结构基本概念
- 1、学习笔记-谁说rookie不会数分(入门篇)
- 让IE6/IE7/IE8浏览器支持CSS3属性
- 【含源码】用python做游戏有多简单好玩
热门文章
- 巴菲特经典演讲《价值投资为什么能够持续战胜市场》
- 【Python】解决CNN中训练权重参数不匹配size mismatch for fc.weight,size mismatch for fc.bias
- 微信是怎么打造平台型生态商业模式的?
- Algorithm Gossp (18) 最大公因数、最小公倍数、因式分解
- 微信小程序 实现美团外卖 菜单分类,左右联动 效果
- 干货分享 | GopherChina 2019北京大会PPT下载
- 图片转成pdf格式怎么转?
- python文件操作入门
- 小明身高180cm,小刚身高165cm,计算两人的身高差
- 服务器装系统引导进去系统usb失灵,重装win7后usb全部失灵原因分析以及解决方法(完美解决)...