【Redis 一】Jedis操作Redis有序集合类型(SortedSet)

Redis的高级操作,通过Jedis来进行数据的存储

    private Jedis jedis;
    private Jedis getJedis() {
        return jedis;
    }

    //exists是否存在key键
    public boolean existsKey(String key) {
        return getJedis().exists(key);
    }

    //del 删除key键
    public void deleteKey(String key) {
        getJedis().del(key);
    }

    //rpush 向list尾部追加记录 发现存的是String,会返回记录总数
    public void setMemIds(String key, List<Integer> memIds) {
        for (Integer memberId : memberIds) {
            getJedis().rpush(key, memberId.toString());
        }
    }

    
    //lrange 返回存储在 key 的列表里指定范围内的元素
    //0为第一个元素 为list的表头,-1 表示列表的最后一个元素
    public List<Integer> getMemIds(String key) {
        List<String> values = getJedis().lrange(key, 0, -1);
        if (Utils.isEmpty(values)) {
            return null;
        }

        List<Integer> list = new ArrayList<>(values.size());
        for (String value : values) {
            list.add(Integer.parseInt(value));
        }
        return list;
    }


    //zadd 添加 将一个或多个成员元素及其分数值加入到有序集当中
    public void setMegCount(String key, Map<Integer, Integer> Counts) {
        Map<String, Double> map = new HashMap<>(Counts.size() * 2);
        for (Map.Entry<Integer, Integer> entry : Counts.entrySet()) {
            map.put(entry.getKey().toString(), entry.getValue().doubleValue());
        }
        getJedis().zadd(key, map);
    }

     //添加SortSet型数据
    public void setMegCount(String key, Integer count, Integer tId) {
        getJedis().zadd(key, count, tId.toString());
    }


      //zrangeByScoreWithScores 返回有序集 key 中,
      //所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。
      //有序集成员按 score 值递增(从小到大)次序排列。
     public Map<Integer, Integer> getMegCounts(String key) {
        Map<Integer, Integer> map = new HashMap<>();
        //MAX_VALUE = 0x7fffffff 
        // 根据score区间获取集合中的元素,可选项[WITHSCORES]表示选出的元素是否带score值;
        Set<Tuple> set = getJedis().zrangeByScoreWithScores(key, 1, Integer.MAX_VALUE);
       
         if (Utils.isNotEmpty(set)) {
            
            //tuple:元组 
            for (Tuple tuple : set) {
                map.put(Integer.parseInt(tuple.getElement()), (int) tuple.getScore());
            }
        }
        return map;
    }

   
    //zincrby 为有序集key的成员member的score值加上增量increment。
    //如果key中不存在member,就在key中添加一个member,score是increment
    //(就好像它之前的score是0.0)。如果key不存在,就创建一个只含有指定member成员的有序集合。
    public void setIncrbyMessageCount(String key, Integer increment, Integer tId) {
        getJedis().zincrby(key, increment, tId.toString());
    }

     //zscore命令返回有序集中,成员的分数值,
     //如果成员元素不是有序集 key 的成员,或 key 不存在,返回 nil 
    public Integer getMsgCount(String key, Integer tId) {
        Double count = getJedis().zscore(key, tId.toString());
        if (Utils.isNull(count)) {
            return null;
        }
        return count.intValue();
    }


    @Override
    public void setRecentlyTop10(String key, Integer aId) {
        long base = System.currentTimeMillis();
        getJedis().zadd(key, base, aId.toString());
    }

  
    //zrevrange获取给定区间的元素,原始按照权重由高到低排序
    public List<Integer> getRecentlyTop10(String key) {
        Set<String> values = getJedis().zrevrange(key, 0, 10);
        if (Utils.isEmpty(values)) {
            return null;
        }

        List<Integer> list = new ArrayList<>(values.size());
        for (String value : values) {
            list.add(Integer.parseInt(value));
        }
        return list;
    }

   
    //直接设置value为Integer类型
    public void setTaskMessageTime(String key, long score, Integer taskId) {
        getJedis().zadd(key, score, taskId.toString());
    }

    

    //直接设置values为map
    public void setTaskMessageTimes(String key, Map<Integer, Long> msgTimes) {
        Map<String, Double> map = new HashMap<>(msgTimes.size() * 2);
        for (Map.Entry<Integer, Long> entry : msgTimes.entrySet()) {
            map.put(entry.getKey().toString(), entry.getValue().doubleValue());
        }

        getJedis().zadd(key, map);
    }

     //根据key值获取值
    public List<Integer> getUserTaskIds(String key) {
        String values = getJedis().get(key);
        if (StringUtils.isEmpty(values)) {
            return null;
        }

        return Utils.string2list(values);
    }

    //直接设置list 类型数据
    public void setIds(String key, List<Integer> tIds) {
        getJedis().set(key, Utils.list2string(tIds));
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章