REDIS构建文章聚合信息分类网站

 

本系列教程内容提要

我们通过什么机制进行排序呢?

既然你能想到一定是经过一系列的运算过程的出来的排序过程,那么我们可否设计一个符合我们自己网站的 "运算过程" 呢? 我们规定:

设计Redis表结构

表名 结构
文章 HASH
投票人 SET
群组 SET
文章评分排行 ZSET
文章最新排行 ZSET
群组最新文章 ZSET
群组评分排行 ZSET

核心源码

查询文章 (查询功能做的最多的就是拼装数据,但是在查询某个群组的文章的时候,就是涉及到了Redis的交集运算)

    /**      * 获得所有文章列表文章列表      *      * @param page  页数      * @param order 排序      * @param model 模型      * @return      */     @GetMapping(value = "/getArticleList")     public String getArticle(@RequestParam(required = false, defaultValue = "1") Integer page, @RequestParam(required = false, defaultValue = "score") String order, Model model) {         /*获取文章列表*/         List<Article> articleArrayList = getArticles(jedis, page, order + ":");         /*拼装分页信息*/         model.addAttribute("articleArrayList", articleArrayList);         model.addAttribute("order", order);         model.addAttribute("page", page);         return "index";     }
    /**      * 获取分组文章列表      *      * @return      */     @GetMapping(value = "/getGroupArticleList")     public String getGroupArticle(@RequestParam(required = false, defaultValue = "1") Integer page,                                   @RequestParam(required = false, defaultValue = "score") String order,                                   @RequestParam(required = true) String group, Model model) {         List<Article> groupArticles = getGroupArticles(jedis, group, page, order + ":");         /*拼装分页信息*/         model.addAttribute("groupArticles", groupArticles);         model.addAttribute("group", group);         model.addAttribute("order", order);         model.addAttribute("page", page);         return "group";     }

发布文章 (发布文章需要注意的是根据文章的所属群组,将其添加至相关群组)

/**      * 发布文章      *      * @param article      * @param model      * @return      */     @PostMapping(value = "/addArticle")     public String addArticle(Article article, Model model) {         /*模拟用户*/         User user = getUser();         /*从Redis获取文章的自增ID*/         String id = String.valueOf(jedis.incr("article:"));         /*将文章的发帖人本人添加至投票列表*/         String voted = "voted:" + id;         jedis.sadd(voted, user.getUserId().toString());         jedis.expire(voted, ONE_WEEK_IN_SECONDS);         /*将文章添加至文章列表*/         long now = System.currentTimeMillis() / 1000;         String articleId = "article:" + id;         HashMap<

                    
                
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信