美文网首页
移动小游戏中用到的redis缓存

移动小游戏中用到的redis缓存

作者: 宝贝双双 | 来源:发表于2017-06-05 16:31 被阅读0次

    private static int RANK_CACHETTL = 3600*24*30; // RANK类缓存有效期1个月

    private static final Log logger = LogFactory.getLog(RedisService.class);

    @Autowired

    private MFrameworkService mframeworkservice;

    @Autowired

    protected MBeanService mbeanservice;

    // 保存redis记录(当数值是int类型时)

    public void saveRank(String key,int number,String userid){

    JedisCluster jedis =  RedisClusterCache.getJedisCluster();

    Long count = jedis.zadd(key, number, userid);

    if(count!=null && count==1){ // 首次创建时,设置过期时间

    jedis.expire(key, RANK_CACHETTL);

    }

    }

    //保存redis记录(当数值是long类型时)

    public void saveRank(String key,long number,String userid){

    JedisCluster jedis =  RedisClusterCache.getJedisCluster();

    Long count = jedis.zadd(key, number, userid);

    if(count!=null && count==1){ // 首次创建时,设置过期时间

    jedis.expire(key, RANK_CACHETTL);

    }

    }

    //获取当前名次(第一名是0,以此类推)

    public Long getRankNumber(String key,String userid){

    JedisCluster jedis =  RedisClusterCache.getJedisCluster();

    return jedis.zrevrank(key, userid);

    }

    //获取当前名次的百分比

    public float getRankPercent(String key,String userid){

    JedisCluster jedis =  RedisClusterCache.getJedisCluster();

    Long rankNumber = getRankNumber(key, userid);

    Long size = jedis.zcount(key, 0, 999999999);//获取参与的总人数

    //  1-用户当前的排名/活动参与总人数=当前用户所占的百分比

    logger.info("RedisRankService,rankNumber:"+rankNumber+",size:"+size);

    //排名为空,获取的分数不是空,同时size不是0(分母不能为0)

    if(!StringUtils.isEmpty(rankNumber) && !StringUtils.isEmpty(size)&&size!=0)

    return Float.parseFloat(String.valueOf(rankNumber))/Float.parseFloat(String.valueOf(size));

    return 0f;

    }

    //获取分数

    public Double getRankValue(String key,String userid){

    JedisCluster jedis =  RedisClusterCache.getJedisCluster();

    Double value = jedis.zscore(key, userid);

    return (StringUtils.isEmpty(value)||value==null)?0d:value;

    }

    //更新排行榜中某一条数据并返回更新后的值

    public Double refreshRankValue(String key,int number,String userid){

    JedisCluster jedis =  RedisClusterCache.getJedisCluster();

    Double value = jedis.zincrby(key, number, userid);

    return (StringUtils.isEmpty(value)||value==null)?0d:value;

    }

    //获取排行榜public JSONArray getRank(String key,int RankNumber,int orderby){

    JSONArray josna = new JSONArray();

    JSONObject json = null;RankVo vo = null;

    JedisCluster jedis =  RedisClusterCache.getJedisCluster();Setfset;

    if(orderby==0)//正序

    fset= jedis.zrangeWithScores(key, 0, RankNumber-1);

    else//倒叙

    fset= jedis.zrevrangeWithScores(key, 0, RankNumber-1);

    for (Tuple s : fset) {

    String userid = s.getElement();

    UserInfo userinfo = mframeworkservice.get(UserInfo.class, userid);

    if(StringUtils.isEmpty(userinfo))

    continue;

    vo = RankVo.newInstance(RankVo.class);

    vo.setAvatarurl(userinfo.getAvatarurl());

    vo.setUserid(userid);

    vo.setNickname(userinfo.getNickname());

    vo.setMobile(userinfo.getMobile());

    vo.setGames_total(CommonUtils.get2Float(s.getScore()/100f));

    json = JSONBeanUtils.getBeanJSONObject(BeanInfo.getBeanInfo(RankVo.class), vo);

    josna.put(json);

    }

    return josna;

    }

    //获取帮我支持的列表public JSONArray getShareRecord(String key,int RankNumber,int orderby){

    JSONArray josna = new JSONArray();

    JSONObject json = null;RankVo vo = null;

    JedisCluster jedis =  RedisClusterCache.getJedisCluster();

    Setfset;

    if(orderby==0)//正序

    fset= jedis.zrangeWithScores(key, 0, RankNumber-1);

    else//倒叙

    fset= jedis.zrevrangeWithScores(key, 0, RankNumber-1);

    for (Tuple s : fset) {

    String userid = s.getElement();

    UserInfo userinfo = mframeworkservice.get(UserInfo.class, userid);

    if(StringUtils.isEmpty(userinfo))

    continue;

    vo = RankVo.newInstance(RankVo.class);

    vo.setAvatarurl(userinfo.getAvatarurl());

    vo.setUserid(userid);

    vo.setNickname(userinfo.getNickname());

    vo.setMobile(userinfo.getMobile());

    long time =new Double(s.getScore()).longValue();

    vo.setCreatetime(new Date(time));

    String total = jedis.get(key.substring(0,32)+time+s.getElement());

    if(StringUtils.isEmpty(total)||"null".equals(total))

    total = jedis.get(key.substring(0,32)+time+"");

    if(StringUtils.isEmpty(total)||"null".equals(total))

    total = jedis.get(time+"");

    if(StringUtils.isEmpty(total)||"null".equals(total))

    continue;

    vo.setGames_total(CommonUtils.get2Float(Float.parseFloat(total)/100f));

    json = JSONBeanUtils.getBeanJSONObject(BeanInfo.getBeanInfo(RankVo.class), vo);

    josna.put(json);

    }

    return josna;

    }

    //获取中奖记录列表public JSONArray getPrizeRecord(String key,int RankNumber,int orderby,BeanInfo beanInfo){

    JSONArray josna = new JSONArray();

    JSONObject json = null;PrizeRecordVo vo = null;if(key.length()<32)return josna;

    JedisCluster jedis =  RedisClusterCache.getJedisCluster();Setfset;

    if(orderby==0)//正序

    fset= jedis.zrangeWithScores(key, 0, RankNumber-1);

    else//倒叙

    fset= jedis.zrevrangeWithScores(key, 0, RankNumber-1);

    for (Tuple s : fset) {

    String userid = s.getElement().substring(0,32);

    UserInfo userinfo = mframeworkservice.get(UserInfo.class, userid);

    if(StringUtils.isEmpty(userinfo))

    continue;

    vo = PrizeRecordVo.newInstance(PrizeRecordVo.class);

    vo.setAvatarurl(userinfo.getAvatarurl());

    vo.setUserid(userid);

    vo.setNickname(userinfo.getNickname());

    vo.setMobile(userinfo.getMobile());

    long time =new Double(s.getScore()).longValue();

    vo.setCreatetime(new Date(time));

    String prizeid = jedis.get(key.substring(0,32)+time+s.getElement());

    if(StringUtils.isEmpty(prizeid)||"null".equals(prizeid))

    prizeid = jedis.get(time+"");

    if(StringUtils.isEmpty(prizeid)||"null".equals(prizeid))

    continue;

    MBeanBase bean = mbeanservice.get(beanInfo, prizeid);

    if(bean!=null){

    vo.setPrize_title(bean.get("prize_title").toString());

    vo.setPrize_imgurl(bean.get("prize_imgurl").toString());

    }

    json = JSONBeanUtils.getBeanJSONObject(BeanInfo.getBeanInfo(PrizeRecordVo.class), vo);

    josna.put(json);

    }

    return josna;

    }

    //获取redis记录

    public String getBykey(String key){

    JedisCluster jedis =  RedisClusterCache.getJedisCluster();

    return jedis.get(key);

    }

    //获取redis记录

    public int getIntBykey(String key){

    JedisCluster jedis =  RedisClusterCache.getJedisCluster();

    return StringUtils.isEmpty(jedis.get(key))?0:Integer.parseInt(jedis.get(key));

    }

    // 保存redis记录

    // add by dbb, 过期时间:15日

    public void saveByKey(String key,String value){

    JedisCluster jedis =  RedisClusterCache.getJedisCluster();

    // jedis.set(key, value);

    jedis.setex(key, 3600*24*30, value);

    }

    //获取当前排行榜中一个区间范围的人数

    public int getRankCount(String key){

    JedisCluster jedis =  RedisClusterCache.getJedisCluster();

    Long size = jedis.zcount(key, 0, 9999999999999d);

    return StringUtils.isEmpty(size)?0:size.intValue();

    }

    相关文章

      网友评论

          本文标题:移动小游戏中用到的redis缓存

          本文链接:https://www.haomeiwen.com/subject/byaifxtx.html