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