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