副标题[/!--empirenews.page--]
前言
这一篇文章将讲述Redis中的sortedset类型命令,同样也是通过demo来讲述,其他部分这里就不在赘述了。

案例
demo功能是文章点赞排名等等,整个demo的大致页面如下。

准备工作
首先定义一个存储文章的key
- private static final String ZSET_KEY = "articleList";
redis操作对象
- private RedisTemplate redisTemplate;
-
- //string 命令操作对象
-
- private ValueOperations valueOperations;
-
- //zset 命令操作对象
-
- private ZSetOperations zSetOperations;
sortedset在Redis中的结构可以看下图(图片来源于Redis in Action)。

列表查询
- @RequestMapping(value = "/getList/{sortType}", method = RequestMethod.GET)
-
- public Set getList(@PathVariable String sortType) {
-
- //如果没有数据,则添加10条数据
-
- if (zSetOperations.size(ZSET_KEY) == 0){
-
- for (int i = 1; i <= 10; i++) {
-
- zSetOperations.add(ZSET_KEY,"文章:"+i, (int)(Math.random()*10+i));
-
- }
-
- }
-
- //ASC根据分数从小到大排序,DESC反之
-
- if ("ASC".equals(sortType)){
-
- return zSetOperations.rangeWithScores(ZSET_KEY, 0, -1);
-
- } else {
-
- return zSetOperations.reverseRangeWithScores(ZSET_KEY, 0, -1);
-
- }
-
- }
这里为了省去一个个添加数据的麻烦,就在获取列表数据中加了个判断。当文章数据为0时,默认添加10条数据,设置随机score加上所在的索引。
然后根据url中的参数sortType来决定返回的数据是按照分数升序还是降序排序。功能效果如下

命令介绍

赞或踩
java代码如下
- @RequestMapping(value = "/star", method = RequestMethod.POST)
-
- public boolean starOrUnStar(String member, String type) {
-
- if ("UP".equals(type)){
-
- zSetOperations.incrementScore(ZSET_KEY, member, 1);
-
- } else {
-
- zSetOperations.incrementScore(ZSET_KEY, member, -1);
-
- }
-
- return true;
-
- }
根据type决定是否加减分数,当type为UP时表示赞,为其他(DOWN)时表示踩。功能效果如下

命令介绍

升降序排名
java代码如下
- @RequestMapping(value = "/rank/{type}/{member}", method = RequestMethod.GET)
-
- public Long rank(@PathVariable String member, @PathVariable String type) {
-
- Long rank = null;
-
- if ("ASC".equals(type)){
-
- rank = zSetOperations.rank(ZSET_KEY, member);
-
- } else {
-
- rank = zSetOperations.reverseRank(ZSET_KEY, member);
-
- }
-
- return rank;
-
- }
(编辑:滁州站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|