首页 > 其他分享 >大营销笔记

大营销笔记

时间:2024-04-22 21:47:28浏览次数:24  
标签:奖品 redis 营销 笔记 key 102 104 105

大营销

第三节:策略概率装配处理

装配流程

  1. 装配抽奖策略,根据抽奖策略ID(strategy_id)进行装配

    • 子流程如下:

    • 根据抽奖策略ID(strategy_id)去数据库查询该策略配置下的奖品列表(strategyAwardEntityList),先从redis中读,如果redis中没有,再去数据库中拿,拿完转完一下实体类,存redis中,并返回这个奖品列表

    • 拿到奖品列表后,进行第一次装配(此时没有根据权重规则过滤奖品),在redis中存的是该策略ID(strategy_id)下所有的奖品列表。

      • 装配子流程:需要一个key(strategy_id),一个奖品列表实体类

      • 拿最小概率值(方便后续计算)

      • 拿概率值总和(所有的概率加一起,后面计算用)

      • 获得概率范围,就是用概率总和除以这个最小概率值,向正无穷取整,算出来个大小范围,比如100.0/0.1 就是1000。就是相当于把小数点给去掉,得出来一个范围(0-1000)

      • 生成策略概率查找表,生成一个list,大小就是上面的范围大小,然后根据相应的规则向里面填充奖品ID,比如奖品1占10%,就填充100个(以1000为例),把这个list填满。

      • 然后乱序处理,交换各个元素的位置,保证它们的随机性,不然抽奖概率会有影响

      • 生成一个map,奖品查找表,其实就是把这个list放到map里,key值是 list的大小从小到大,value值是奖品id

      • 最后把这个map存放到redis中,这一步有一个putall操作,如果你的redis报了一个(org.springframework.dao.InvalidDataAccessApiUsageException: ERR Protocol error: invalid multibulk length.)这种异常(windows 环境下 一个老版本的 redis 报的,mac 环境下redis版本 7.2.3 没有报,一切正常)可以试试把概率改小,map小一点,我这个改成了小数点后一位就正常了,可能是redis配置或者版本的问题。

  2. 装配权重策略,根据这个id去数据库里查,优先查redis,没有再去数据库查,查完存redis并返回 (StrategyEntity)这个实体类

    • 从ruleModels中遍历看是否有"rule_weight"这个规则,有就是需要权重过滤,没有,为null直接结束
  3. 再次验证规则是否有异常,走到这一步是一定有 rule_weight的,如果根据id和ruleWeight查询不到,抛出异常,流程异常结束

  4. 根据权重规则,重新装配奖品

    • 首先拿到 rule_weight 下所有的规则,4000分的规则,5000分的规则等等
    • 就是这一串(4000:102,103,104,105 5000:102,103,104,105,106,107 6000:102,103,104,105,106,107,108,109)
    • 把规则分割一下,key:(4000:102,103,104,105),value:([102],[103],[104],[105]),value是该规则下所有的奖品id,返回一个map<key,value>
    • 遍历这个map,每个key下都有list奖品列表,从第一步装配的(strategyAwardEntityList)克隆一个新的list,从中移除 list奖品 中没有的
    • 把这个克隆的新的list重新装配进redis中,参考装配子流程
  5. 装配结束(此时redis中key如下)

127.0.0.1:6379> keys *
"big_market_strategy_award_key_100001"
"big_market_strategy_rate_table_key_100001_5000:102,103,104,105,106,107"
"big_market_strategy_rate_table_key_100001_4000:102,103,104,105"
"big_market_strategy_rate_range_key_100001_5000:102,103,104,105,106,107"
"big_market_strategy_rate_table_key_100001_6000:102,103,104,105,106,107,108,109"

抽奖流程

24-04-22.21:07:53.724 [main            ] INFO  StrategyArmoryDispatch - rateRange:6
24-04-22.21:07:53.728 [main            ] INFO  StrategyArmoryDispatch - key:100001_4000:102,103,104,105, result:105
24-04-22.21:07:53.728 [main            ] INFO  StrategyTest           - 测试结果:105 - 4000 策略配置
24-04-22.21:07:53.729 [main            ] INFO  StrategyArmoryDispatch - rateRange:14
24-04-22.21:07:53.729 [main            ] INFO  StrategyArmoryDispatch - key:100001_5000:102,103,104,105,106,107, result:106
24-04-22.21:07:53.729 [main            ] INFO  StrategyTest           - 测试结果:106 - 5000 策略配置
24-04-22.21:07:53.729 [main            ] INFO  StrategyArmoryDispatch - rateRange:4901
24-04-22.21:07:53.730 [main            ] INFO  StrategyArmoryDispatch - key:100001_6000:102,103,104,105,106,107,108,109, result:107
24-04-22.21:07:53.730 [main            ] INFO  StrategyTest           - 测试结果:107 - 6000 策略配置

抽奖流程需要知道,抽奖的策略ID(strategyId),还有抽奖的规则(ruleWeightValue)

  1. 拼接出来redis的key,就是id+规则
  2. 从redis中拿(自动拼接big_market_strategy_rate_range_key_)这个 map 中存储的是生成的随机数,以及该策略 id 下 map 的大小(rateRange),根据 key从 redis中拿到一个概率范围rateRange
  3. 随机获取 0-rateRange 之间的值,根据key(自动拼接big_market_strategy_rate_table_key_ ) 和生成的随机数从 map 中拿到奖品 id并返回

标签:奖品,redis,营销,笔记,key,102,104,105
From: https://www.cnblogs.com/xiaolibiji/p/18151606

相关文章

  • Lustre架构介绍的阅读笔记-客户端
    本文是在阅读IntroductiontoLustre*Architecture的LustreFileSystem–Clients时的笔记。Lustre客户端部署在客户的计算节点上,工作时不占用本地的硬盘。不使用本地硬盘作为缓存或者后备空间。对存储系统的访问均通过网络。Lustre客户端作为Linux内核的模块,工作在内核......
  • Lustre架构介绍的阅读笔记-SMB协议
    本文是在阅读IntroductiontoLustre*Architecture的LustreSMBGatewaySystemArchitecture时的笔记。Lustre只支持Linux系统,但借助Samba可以支持SMB协议,进而对Windows主机提供文件访问能力。参考资料WelcometotheCTDBwebpagesCTDBisaclusterimplementationof......
  • 模型评测-书生浦语大模型实战营学习笔记7&大语言模型10
    大语言模型学习-10.模型评测书生浦语大模型实战营学习笔记7视频教程特别像广告,所以这篇博客参考了很多其他内容给大家参考,主要是下面几个页面:https://zhuanlan.zhihu.com/p/641416694https://www.cnblogs.com/justLittleStar/p/17845341.htmlhttps://zhuanlan.zhihu.com/p/68......
  • 只要2599元!Intel笔记本旗舰i9-13980HX搬上桌面:史上最强mATX小板
    这两年出现了不少集成Intel、AMD笔记本移动处理器的桌面主板,深圳尔英(Erying)更是首次将Intel13代酷睿HX系列放在了mATX小主板之上,标准的244x244毫米尺寸。新板子隶属于PoleStar极星系列,别看面积不大,配置却相当彪悍,比如10相供电电路和一体式散热装甲、四个4针风扇插针,可控制......
  • 低开开发笔记(四):实现编辑器内拖拽
    好家伙,本篇我们来说说,编辑器内如何实现拖拽完整代码已开源https://github.com/Fattiger4399/ph-questionnaire.git  0.效果预览 1.思路1.1.视图操作分析这一块是这一章节最核心的部分到 用户进行了什么操作?(1)点击编辑器中第一个组件(2)松开(3)在setter中修改第一......
  • multi-agent框架camel学习笔记(二)RAG和向量数据库
    本系列想学习如何从零开始搭建一个multi-agent系统并融入到应用中,这篇文章主要写其中的LLM-agent的核心模块RAG和向量数据库,以及Camel系统中是如何使用RAG。1.为什么要用RAG(检索增强生成)先聊下什么是RAG,为什么我们要用RAG:RAG和向量数据库本身不是很新的技术,传统的搜广推里也......
  • 置换群学习笔记
    一、群引自OIwiki:在数学中,群(group)是由一个集合\(G\),以及一个在\(G\)所有元素上进行的二元运算\(\cdot\),符合「群公理」的代数结构,记作\((G,\cdot)\)。群公理包含下述四个性质:满足封闭性。满足结合律。存在单位元(也称幺元)。存在逆元。而子群的定义则为......
  • 【笔记】动手学深度学习-前言
    1、学习深度学习,首先第一点要亲自动手。2、相关anacoda的环境的安装方法,用来隔绝相关的依赖关系,防止安装包冲突。3、机器学习程序不同于一般程序,能够随着数据的增加,通过调节内部的参数,展现出一定的智能的想象。4、机器学习中的核心组件:数据、模型、目标函数、算法。5、常用的......
  • day18_我的Java学习笔记 (Logback日志框架、阶段项目--详见视频教程)
    1.日志框架1.1日志技术的概述1.2日志技术体系结构1.3Logback概述需要3个文件:1.4Logback快速入门1.4.1在项目下新建lib文件夹,导入Logback的相关jar包,并全选右键添加到项目依赖库中新建工程:logback-app将3个jar包拷贝到lib目录下全选,右键,选择......
  • 图的连通性(tarjan) 学习笔记
    本文可能含有:部分代码省略,部分资源来源于网络,极其模糊不清的语言表述,粗浅到浮于言表的对于此算法的认识。本文仅用于个人学习与报告使用。若有侵权,请洛谷私信联系笔者要求删除。就连上述文字都是抄袭大佬@GClock_519的,可以看得出笔者拙劣的语文水平(图的连通性相关,顾名思义,......