`

关于领号活动总结

 
阅读更多
关于某彩票活动的总结
具体需求,每个用户进活动页面,领取一个号码,1000中的一个;
活动要求
1,随机性,一定要有随机性;
2,最少中奖概率,如果注数为3200注,则最多中4注
3,效率问题,(不能每个人来都产生一个随机数,这样效率不高);
4,支持断电(仍然从下一个开始),重启服务;(存数据库有点大材小用,因此不能存放在数据库)

解决方案
1,事先产生随机数1000个,并打乱数据(initHaoPool)
2,算法采用,计数,从1开始,领到1000个,又重新从1开始
3,不能存放数据库,
第一想法,那就存放在action里;action在struts2中不是安全的,有多个实例,否定
第二想法,放在service里,由于service是单例,可以保证线程安全;
(因此我以service的领号顺序为主,memcahe中的当备份使用,当主站重启时,memcahe还可以获取)

后来第二个方法也出问题了,3G站的领号不按顺序,为什么呢
原来我们的服务器采用双IP,2套代码服务,通过切换IP达到临时换包的效果;
假设线上服务器为A,由于3G站的HOST指到了B上,因此2套代码中的service都是独立的;

第三想法,放在memcache中,以memcache为主,service的为备份,这样就保证了代码的正确性;

但是后来又出问题了,早上10点13分,领号的数据又重复了,原因是当时同事切换了服务器,2台服务器代码都是不一致的,又导致了错误。

总结一下;在分布式环境下,要保持数据的一致性,放代码实在不可靠,
第一选择 是数据库
第二选择 是cache
最后才是 action,但这个保存不住,实在有问题;

下面是代码






/**
     * 初始化号码池
     *
     * @return
     */
    public  void  initHaoPool() {
    //如果action中的结果集和缓存中的结果集都为空,则初始化;
    if(hl==null&&CacheDataService.getCacheObject("<webactivityList>hl")==null){

    hl = new ArrayList<String>();
    //生成1000个号码
    for (int i = 0; i < 1000; i++)
        {
        String randomNo="";
        if (i < 10) {
        randomNo= "00" + i;
        }
        else if (i < 100 && i >= 10) {
        randomNo= "0" + i;
        }else{
        randomNo=Integer.valueOf(i).toString();
        }
        hl.add(randomNo);
        }
//打乱顺序
Collections.shuffle(hl);

//初始lhkey为0; 
lhkey=0;

CacheDataService.setCacheObject("<webactivityList>hl", hl,  60*60*24);
CacheDataService.setCacheObject("<webactivityInteger>lhkey", lhkey,  60*60*24);


    }

    }
   
    /**
     * 清除号码池和缓存
     *
     * @return
     */
    public   void  clearPoolCache() {
    hl=null;
    lhkey=0;
   
    //清除缓存;
CacheDataService.deleteCacheObject("<webactivityList>hl");
    CacheDataService.deleteCacheObject("<webactivityInteger>lhkey");
   
    }
   
   
   
   
   
    /**
     * 随机领取号码
     *
     * @return
     */
   
    public synchronized String getMyNumber(){
   String myno="";
  
//   如果丢失,从cache中取;
//   if(hl==null){
//   hl= (List)CacheDataService.getCacheObject("<webactivityList>hl");
//   lhkey= (Integer)CacheDataService.getCacheObject("<webactivityInteger>lhkey");
//   }
  
//如果丢失,从memcache中取;
if((List)CacheDataService.getCacheObject("<webactivityList>hl")!=null){
hl= (List)CacheDataService.getCacheObject("<webactivityList>hl");
lhkey= (Integer)CacheDataService.getCacheObject("<webactivityInteger>lhkey");
}
  
  
   if(lhkey<1000){
   myno=(String)hl.get(lhkey);
   lhkey=lhkey+1;
}else{
     //System.out.println("从0开始循环--------------");
     myno=(String)hl.get(0);
     lhkey=1;
     }
       
   //更新缓存信息
    CacheDataService.setCacheObject("<webactivityList>hl", hl,  60*60*24);
    CacheDataService.setCacheObject("<webactivityInteger>lhkey", lhkey,  60*60*24);
   
    return myno;
   }
分享到:
评论

相关推荐

    大班参观小学活动总结.docx

    大班参观小学活动总结 大班参观小学活动总结是指幼儿园大班幼儿参观小学的活动计划和实施方案。该活动的主要目的是让幼儿了解即将面临的入学变化,初步体验学校的作息时间及课程模式,削减幼儿对学校的生疏感、神奇...

    三月八日活动总结范文.doc

    【文档标题】提到的是“三月八日活动总结范文”,这通常是指在三八国际妇女节期间举办的各类庆祝和纪念活动的总结报告。这类活动旨在纪念妇女在社会、经济、文化和政治领域的贡献,同时提升女性的地位和权益。 ...

    51自动领积分vs金豆系统

    由于信息有限,无法提供更多关于“csuft”文件的具体细节,但它可能是下载后的软件安装包或者是运行该自动领积分系统的必要组件。 总结起来,"51自动领积分vs金豆系统"是一个非官方的、用于自动领取51社区积分的...

    html5端午节领卷输入手机号验证代码

    在这个“html5端午节领卷输入手机号验证代码”中,我们可以推测这是一段用于端午节活动的HTML5代码,它涉及到用户通过输入手机号进行验证以领取优惠券的场景。 首先,HTML5提供了表单控制元素来收集用户输入,如`...

    “消防安全月”活动总结.doc

    【消防安全月】活动总结 消防安全是建筑工程领域的重要组成部分,它关系到工人的生命安全和项目的顺利进行。在xx年,工程部积极响应上级[xx]117号和[xx]140号文件的要求,组织并实施了“消防平安月”活动,旨在强化...

    防诈骗安全讨论活动总结 (2).docx

    【防诈骗安全讨论活动总结】 在当今信息化社会,诈骗手段日益多样,给人们的生活带来了严重的威胁。为了提高学生们的安全意识,高一(3)班在班主任的指导下开展了一次“防诈骗教育”主题班会。这次活动旨在让学生...

    fh.rar_发号_网页游戏

    例如,通过举办限时领号活动,配合论坛话题讨论,可以激发玩家的参与热情,同时也增加了论坛的浏览量和用户粘性。 总结,DZPHP网页游戏发号系统是DZ论坛的一个强大扩展,它将游戏推广与社区互动紧密结合,为游戏...

    依据工单号查询领料单、入库单.pdf

    总结来说,依据工单号查询领料单和入库单是制造业信息系统中的核心功能,它实现了生产流程的透明化和自动化,有效提升了企业的生产管理能力。通过熟练掌握这一功能的使用,企业能够更好地掌控生产进度,优化资源分配...

    京东金币淘宝喵币苏宁易购领人气(在hyue418项目基础上增加苏宁易购双十一活动自动化功能.zip

    该压缩包文件“京东金币淘宝喵币苏宁易购领人气(在hyue418项目基础上增加苏宁易购双十一活动自动化功能.zip”显然是一个针对电商购物活动自动化工具的更新版本,特别聚焦于京东、淘宝以及苏宁易购这三个平台的特定...

    2013万能淘宝双十二做任务领红包辅助3.0

    总结来说,这款2013年的“万能淘宝双十二做任务领红包辅助3.0”是一个针对淘宝双十二活动的第三方工具,它的主要目的是帮助用户高效完成任务以获得红包。虽然它被宣传为安全无毒,但用户在使用时仍需谨慎,因为依赖...

    裁 工 领 料 记 录.doc

    总结来说,“裁工领料记录”是制造业中不可或缺的管理工具,它涉及到物料控制、生产计划、成本核算、员工激励等多个方面,对于企业的运营效率和盈利水平有着直接影响。通过精确记录和分析这些数据,企业可以更好地...

    收料领料单、物资分类清单.docx

    ### 收料领料单与物资分类清单知识点详解 #### 一、收料领料单...以上内容为企业内部管理物资时常用的收料领料单及物资分类清单的知识点总结,通过这些细致的分类和管理方式,可以有效提升企业的运营效率和安全性。

    闪送APP登录领劵-易语言.zip

    总结来说,闪送APP的登录领券功能通过易语言实现了用户认证、数据交互、优惠券管理和安全防护等多个环节。易语言以其简洁直观的语法,为开发者提供了高效开发移动应用的可能性。同时,这也体现了在IT行业中,技术的...

    大学生团支书工作总结团支书工作总结与计划.doc

    4. **文明创建**:团支部重视文明创建活动,如“青年文明号”创建,将白源道班、十里道班及路政大队作为重点窗口,提高服务质量和社会形象。 5. **未来计划**:团支书计划在新的一年中,继续深入学习党的重要会议...

    幼儿园小班数学活动小动物找家.pptx

    活动最后,老师带领孩子们总结活动过程,强调了学习的要点,帮助他们巩固所学知识,同时结束活动时的互动也为孩子们提供了表达和反思的机会。 总的来说,"小动物找家"的数学活动是一个精心设计的教学案例,它将抽象...

    医院出纳个人年终工作总结范文四篇.doc

    此外,出纳员还需要全面掌握医保政策、财经法规和医院会计制度,确保业务操作合规,同时积极参与医院各项活动,落实国家关于现金管理的规定,如严格执行现金和结算制度,防止财务风险。 在年度总结的第二部分,出纳...

    三年级开学第一课安全班会总结.docx

    【三年级开学第一课安全班会总结】 本次安全班会的核心目标是提高三年级学生的安全意识,增强他们的自我保护技能,防止各类安全事故的发生,确保学生健康成长。班会在9月1日进行,地点设在本班教室,由班主任带领...

    路政支队长工作总结_.docx

    他倡导节约,与同事和睦相处,积极参与“青年文明号”示范岗活动,践行文明服务理念,为司乘人员提供优质的行车环境。 在团队合作中,路政大队紧密协作,共同应对各种挑战。通过加强内部训练,提高队员的执法水平,...

    坊员线下集中研修活动日志3月30号.doc

    3. **总结与反思** - 放手让学生参与和探究:教师的角色转变为引导者,而非传统的知识传授者,这样有助于培养学生的独立思考和解决问题的能力。 - 教师引导的重要性:在学生自主探索的过程中,适时的教师引导能...

Global site tag (gtag.js) - Google Analytics