redis实现topn
来源:互联网 发布:骨性龅牙手术费知乎 编辑:程序博客网 时间:2024/06/05 09:47
Jedis 是 Redis 官方首选的 Java 客户端开发包。这篇文章我们将介绍如何使用 Sorted Set 排序集合(zsets)。
Sorted Set 跟一个集合一样,它是不会存在重复的数值,最大的不同是 Sorted Set 中每个元素都是经过排序的。
我们先看一些命令:
01
import
java.util.HashMap;
02
import
java.util.Map;
03
04
import
redis.clients.jedis.Jedis;
05
public
class
TestJedis {
06
07
public
static
void
main(String[] args) {
08
String key =
"mostUsedLanguages"
;
09
Jedis jedis =
new
Jedis(
"localhost"
);
10
//Adding a value with score to the set
11
jedis.zadd(key,
100
,
"Java"
);
//ZADD
12
13
//We could add more than one value in one calling
14
Map<Double, String> scoreMembers =
new
HashMap<Double, String>();
15
scoreMembers.put(90d,
"Python"
);
16
scoreMembers.put(80d,
"Javascript"
);
17
jedis.zadd(key, scoreMembers);
18
19
//We could get the score for a member
20
System.out.println(
"Number of Java users:"
+ jedis.zscore(key,
"Java"
));
21
22
//We could get the number of elements on the set
23
System.out.println(
"Number of elements:"
+ jedis.zcard(key));
//ZCARD
24
}
25
}
上述例子中我们看到了 Zset 命令,为了将元素添加到 zet 中,我们使用 zadd 方法,不同的是我们还传递了一个元素的评分值,我们可以使用 Map 对象来一次传递很多个对象,而 zadd 方法可用于增加和更新已有元素的评分值。
我们可使用 zscore 来获取某元素的评分,通过 zcard 获取元素个数。
下面的例子我们可看到来自 zsets 的其他命令:
01
import
java.util.Set;
02
03
import
redis.clients.jedis.Jedis;
04
import
redis.clients.jedis.Tuple;
05
public
class
TestJedis {
06
07
public
static
void
main(String[] args) {
08
String key =
"mostUsedLanguages"
;
09
Jedis jedis =
new
Jedis(
"localhost"
);
10
11
//get all the elements sorted from bottom to top
12
System.out.println(jedis.zrange(key,
0
, -
1
));
13
14
//get all the elements sorted from top to bottom
15
System.out.println(jedis.zrevrange(key,
0
, -
1
));
16
//We could get the elements with the associated score
17
Set<Tuple> elements = jedis.zrevrangeWithScores(key,
0
, -
1
);
18
for
(Tuple tuple: elements){
19
System.out.println(tuple.getElement() +
"-"
+ tuple.getScore());
20
}
21
22
//We can increment a score for a element using ZINCRBY
23
System.out.println(
"Score before zincrby:"
+ jedis.zscore(key,
"Python"
));
24
//Incrementing the element score
25
jedis.zincrby(key,
1
,
"Python"
);
26
System.out.println(
"Score after zincrby:"
+ jedis.zscore(key,
"Python"
));
27
}
28
}
通过 zrange 我们能获取给定范围的元素,它将返回经过排序后的元素列表(自底向上),也可以通过 zrevrrange 获取自顶向下的元素列表。Redis 还允许我们通过关联的评分来获取元素,传递 “withscores“ 参数即可。使用 Jedis API 的zrevrangeWithScores 方法可返回对象集合。另外一个有用的命令是 zincrby 可用于增加元素的评分值。
zsets 还有其他的命令,这里我们只是介绍跟 Jedis API 相关的一些基本用法。这里还有一些关于排序集合的介绍。
- redis实现topn
- redis实现topN
- Day20 实现TopN 排序
- scala 实现topN算法
- Kylin1.6.0 TopN实现
- Hadoop TOPN 实现
- scala 实现topN算法
- topn实现通用分页存储过程
- 基于堆结构的TopN问题实现
- hive使用rank实现topN的查询
- 滑动窗口 TOPN 技术实现演变
- spark中实现分组取topN
- Java实现GroupBy/分组TopN功能
- spark<实现SQL中的GroupBY后取组内TopN>
- Hive TopN+分组TopN
- Hive TopN+分组TopN
- 利用TopN算法实现复杂去重实例一则
- Storm 实现滑动窗口计数和TopN排序<转>
- Unity3D for iOS初级教程:Part 1/3(上)
- boost.asio学习笔记03——io objects
- UI控件详解07-TableView详细解释
- Android使用TextView实现无下划线超链接
- Action获取前台提交条件
- redis实现topn
- boost.asio 学习笔记04——asio的体系结构
- boost.asio 学习笔记05——asio的windows实现
- hdu1285 拓扑排序
- 数据结构(2)之算法初涉
- boost.asio 学习笔记06——其他
- 'adb' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
- SSO单点登录解决方案
- 【Android病毒分析报告】 - Andorid新病毒“UkyadPay”