设为首页 - 加入收藏 应用网_常德站长网 (http://www.0736zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 站长之家 2016 如何 平台
当前位置: 主页 > 运营中心 > 建站资源 > 优化 > 正文

Java架构之Redis系列:通过文章点赞排名案例学习Sortedset命令

发布时间:2019-08-28 14:00 所属栏目:[优化] 来源:老詹啊
导读:副标题#e# 前言 这一篇文章将讲述Redis中的sortedset类型命令,同样也是通过demo来讲述,其他部分这里就不在赘述了。 案例 demo功能是文章点赞排名等等,整个demo的大致页面如下。 准备工作 首先定义一个存储文章的key privatestaticfinalStringZSET_KEY=ar

?前言

这一篇文章将讲述Redis中的sortedset类型命令,同样也是通过demo来讲述,其他部分这里就不在赘述了。

Java架构之Redis系列:通过文章点赞排名案例学习Sortedset命令

案例

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

Java架构之redis系列:通过文章点赞排名案例学习sortedset命令

准备工作

首先定义一个存储文章的key

  1. private?static?final?String?ZSET_KEY?=?"articleList";?

redis操作对象

  1. private?RedisTemplate?redisTemplate;?
  2. ?
  3. //string?命令操作对象?
  4. ?
  5. private?ValueOperations?valueOperations;?
  6. ?
  7. //zset?命令操作对象?
  8. ?
  9. private?ZSetOperations?zSetOperations;?

sortedset在Redis中的结构可以看下图(图片来源于Redis in Action)。

Java架构之redis系列:通过文章点赞排名案例学习sortedset命令

列表查询

  1. @RequestMapping(value?=?"/getList/{sortType}",?method?=?RequestMethod.GET)?
  2. ?
  3. public?Set?getList(@PathVariable?String?sortType)?{?
  4. ?
  5. //如果没有数据,则添加10条数据?
  6. ?
  7. if?(zSetOperations.size(ZSET_KEY)?==?0){?
  8. ?
  9. for?(int?i?=?1;?i?<=?10;?i++)?{?
  10. ?
  11. zSetOperations.add(ZSET_KEY,"文章:"+i,?(int)(Math.random()*10+i));?
  12. ?
  13. }?
  14. ?
  15. }?
  16. ?
  17. //ASC根据分数从小到大排序,DESC反之?
  18. ?
  19. if?("ASC".equals(sortType)){?
  20. ?
  21. return?zSetOperations.rangeWithScores(ZSET_KEY,?0,?-1);?
  22. ?
  23. }?else?{?
  24. ?
  25. return?zSetOperations.reverseRangeWithScores(ZSET_KEY,?0,?-1);?
  26. ?
  27. }?
  28. ?
  29. }?

这里为了省去一个个添加数据的麻烦,就在获取列表数据中加了个判断。当文章数据为0时,默认添加10条数据,设置随机score加上所在的索引。

然后根据url中的参数sortType来决定返回的数据是按照分数升序还是降序排序。功能效果如下

Java架构之redis系列:通过文章点赞排名案例学习sortedset命令

命令介绍

Java架构之redis系列:通过文章点赞排名案例学习sortedset命令

赞或踩

java代码如下

  1. @RequestMapping(value?=?"/star",?method?=?RequestMethod.POST)?
  2. ?
  3. public?boolean?starOrUnStar(String?member,?String?type)?{?
  4. ?
  5. if?("UP".equals(type)){?
  6. ?
  7. zSetOperations.incrementScore(ZSET_KEY,?member,?1);?
  8. ?
  9. }?else?{?
  10. ?
  11. zSetOperations.incrementScore(ZSET_KEY,?member,?-1);?
  12. ?
  13. }?
  14. ?
  15. return?true;?
  16. ?
  17. }?

根据type决定是否加减分数,当type为UP时表示赞,为其他(DOWN)时表示踩。功能效果如下

Java架构之redis系列:通过文章点赞排名案例学习sortedset命令

命令介绍

Java架构之redis系列:通过文章点赞排名案例学习sortedset命令

升降序排名

java代码如下

  1. @RequestMapping(value?=?"/rank/{type}/{member}",?method?=?RequestMethod.GET)?
  2. ?
  3. public?Long?rank(@PathVariable?String?member,?@PathVariable?String?type)?{?
  4. ?
  5. Long?rank?=?null;?
  6. ?
  7. if?("ASC".equals(type)){?
  8. ?
  9. rank?=?zSetOperations.rank(ZSET_KEY,?member);?
  10. ?
  11. }?else?{?
  12. ?
  13. rank?=?zSetOperations.reverseRank(ZSET_KEY,?member);?
  14. ?
  15. }?
  16. ?
  17. return?rank;?
  18. ?
  19. }?

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章