副标题[/!--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; 
 -  
 - } 
 
  
                                                (编辑:52站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |