【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));
    }
}

 

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