当前位置: 首页 > wzjs >正文

苏州网站建设布局网站优化排名易下拉效率

苏州网站建设布局,网站优化排名易下拉效率,荣耀手机官方网站首页,国外社交网站建设前言: 高并发的活动预热肯定不可以在数据库操作,需要redis,特别是这种秒杀活动更是需要注意,所以可以在高并发的前夕先进行活动预热。 思路: 1、 通过定时任务调度每分钟查询数据库也没有需要预热的活动 2、采用分布式…

前言:

        高并发的活动预热肯定不可以在数据库操作,需要redis,特别是这种秒杀活动更是需要注意,所以可以在高并发的前夕先进行活动预热。

 思路:

       1、 通过定时任务调度每分钟查询数据库也没有需要预热的活动

        2、采用分布式锁防止任务重复调度

        3、查询到预热活动需要信息全部进行redis存储

        4、生成令牌桶

                  细节:生成总奖品个数个令牌

                             每个令牌生成开始到结束时间的一个随机数

                              乘上1000,在额外加上一个三位数的随机数  ------防止奖品过多令牌重复

                              把令牌放入令牌桶

                              设置令牌和奖品的关系

        5、先按照时间大小排序,在压入redis

        6、改变预热状态

    @Scheduled(cron = "0 * * * * ?")public void execute() {//TODO 缓存预热// 获取当前时间的Calendar实例Calendar calendar = Calendar.getInstance();// 清除毫秒部分calendar.set(Calendar.MILLISECOND, 0);// 获取不带毫秒的Date对象Date now = calendar.getTime();//分布式锁,防止重复启动任务if (!redisUtil.setNx("game_task_"+now.getTime(),1,60L)){log.info("task started by another server!");return;}//查询将来1分钟内要开始的活动QueryWrapper<CardGame> gameQueryWrapper = new QueryWrapper<>();//开始时间大于当前时间gameQueryWrapper.gt("starttime",now);//小于等于(当前时间+1分钟)gameQueryWrapper.le("starttime",DateUtils.addMinutes(now,1));List<CardGame> list = gameService.list(gameQueryWrapper);if(list.size() == 0){//没有查到要开始的活动log.info("没有查到要开始的活动");return;}log.info("需要缓存预热的活动个数:{}",list.size());//有相关活动数据,则将活动数据预热,进redislist.forEach(game ->{//活动开始时间long start = game.getStarttime().getTime();//活动结束时间long end = game.getEndtime().getTime();//计算活动结束时间到现在还有多少秒,作为redis key过期时间long expire = (end - now.getTime())/1000;
//            long expire = -1; //永不过期//活动持续时间(ms)long duration = end - start;Map queryMap = new HashMap();queryMap.put("gameid",game.getId());//活动基本信息game.setStatus(1);redisUtil.set(RedisKeys.INFO+game.getId(),game,-1);log.info("活动ID:{},名称:{},开始:{},结束{}", game.getId(),game.getTitle(),game.getStarttime(),game.getEndtime());//活动奖品信息List<CardProductDto> products = gameLoadService.getByGameId(game.getId());Map<Integer,CardProduct> productMap = new HashMap<>(products.size());products.forEach(p -> {productMap.put(p.getId(),p);});//奖品数量等配置信息List<CardGameProduct> gameProducts = gameProductService.listByMap(queryMap);//令牌桶List<Long> tokenList = new ArrayList();gameProducts.forEach(cgp ->{//生成amount个start到end之间的随机时间戳做令牌for (int i = 0; i < cgp.getAmount(); i++) {long rnd = start + new Random().nextInt((int)duration);//为什么乘1000,再额外加一个随机数呢? - 防止时间段奖品多时重复//记得取令牌判断时间时,除以1000,还原真正的时间戳long token = rnd * 1000 + new Random().nextInt(999);//将令牌放入令牌桶tokenList.add(token);//token到实际奖品之间建立映射关系redisUtil.set(RedisKeys.TOKEN + game.getId() +"_"+token,productMap.get(cgp.getProductid()),expire);}});//排序后放入redis队列Collections.sort(tokenList);log.info("load tokens:{}",tokenList);//从右侧压入队列,从左到右,时间戳逐个增大redisUtil.rightPushAll(RedisKeys.TOKENS + game.getId(),tokenList);redisUtil.expire(RedisKeys.TOKENS + game.getId(),expire);//奖品策略配置信息List<CardGameRules> rules = gameRulesService.listByMap(queryMap);//遍历策略,存入redis hsetrules.forEach(r -> {redisUtil.hset(RedisKeys.MAXGOAL +game.getId(),r.getUserlevel()+"",r.getGoalTimes());redisUtil.hset(RedisKeys.MAXENTER +game.getId(),r.getUserlevel()+"",r.getEnterTimes());redisUtil.hset(RedisKeys.RANDOMRATE +game.getId(),r.getUserlevel()+"",r.getRandomRate());});redisUtil.expire(RedisKeys.MAXGOAL +game.getId(),expire);redisUtil.expire(RedisKeys.MAXENTER +game.getId(),expire);redisUtil.expire(RedisKeys.RANDOMRATE +game.getId(),expire);//活动状态变更为已预热,禁止管理后台再随便变动game.setStatus(1);gameService.updateById(game);});}

                                

        

        

http://www.dtcms.com/wzjs/117803.html

相关文章:

  • 建设银行官方网站云服务中心怎么做电商创业
  • 宁波网站推广工作室电话网络加速器
  • 网站建设主要产品百度收录网站要多久
  • 广州的企业网站建设网站百度不收录的原因
  • 网站主机租用多少钱上海app网络推广公司电话
  • 做外贸接私单的网站职业技术培训
  • 网站开发形式选择百度小说风云榜排名
  • 国外红人营销网站搜索引擎优化实训心得
  • 基于web的网站开发开题报告谷歌seo网站排名优化
  • 自己建网站有什么用深圳白帽优化
  • 那种软件可以做视频网站代做网页设计平台
  • 公司域名让做网站的公司网络推广方案
  • 个人做网站要注意什么条件百度卖货平台
  • 青岛网站设计百度搜索热词查询
  • 仿制单页面网站多少钱广告推广网站
  • 建网站卖广告刷排名的软件是什么
  • j建设性网站的缺点网上售卖平台有哪些
  • 西安东郊网站建设公司推广方案策划
  • 品牌建设的六个步骤seo专员
  • 手机网站自动跳转怎么解决网络营销推广的方式
  • 镇江建站精准推广
  • 企业网站建设价格排名优化seo公司
  • 南京商城网站建设网络营销是什么专业
  • 外贸网站建设公司价格seo网站推广的主要目的是什么
  • 对网站二次开发的认识新冠咳嗽怎么办
  • 手机网站如何做才能兼容性各种手机seo排名优化价格
  • 长春网站排名优化费用廊坊seo排名公司
  • 网站seo怎样做推广方案怎么写
  • 网站建设的课程设计报告建站优化公司
  • 如何操作网站建设团队是什么公司的seo是什么意思