博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于 Redis + PHP 实现 24小时新闻推荐系统
阅读量:400 次
发布时间:2019-03-05

本文共 1283 字,大约阅读时间需要 4 分钟。

产品描述:

1、开发一款高性能的24小时新闻推荐系统。

后台操作: 管理后台,编辑可以手动推送文章到24小时推荐列表(以下简称推荐列表),文章审核通过后,满足一定规则的文章进入推荐列表(比如高于指定等级的用户等,不是本文讨论的重点,请自行查阅相关资料)。

前台展示: 用户如果没有登录的时候,是默认展示编辑推荐(获取系统精选文章)。当用户登录时,则展示用户关注的博主的文章和用户关注的领域(或者标签)的文章。

为了满足高性能的需求,我们采用 Redis 作为存储的数据库。
下面是流程示意图:
在这里插入图片描述
文章存储和读取示意图

2、文章列表的实现概述:

我们使用有序集合(zset)来存储文章id和文章权重(文章发表的时间戳), 使用 hash 存储文章字段。用户关注的博主和兴趣领域标签分别都是集合存储,可以方便的使用集合操作来实现关联操作。
下图是存储数据示意图:
在这里插入图片描述
24小时热文存储示意图
如何获取用户关注博主的文章列表的集合操作示意图:
在这里插入图片描述
感兴趣的博主文章列表集合操作

3、下面是伪代码的实现:

// 添加文章add_article($article){		$article_fields = [			'article_id'  => $article['article_id'],			'create_time' => strtotime($article['create_time']),			'title'       => $article['title'],			'user_id'     => $article['user_id'],			'nickname' => $article['nickname'],			'logo'        => $article['logo'],			'cover'       => $article['cover'],			'category' => $article['category'],		];		$this->redis->multi();		$this->redis->hmset( 'article:' . $article['article_id'], $article_fields );		$res = $this->redis->zadd('article:list', strtotime($article['create_time']), $article['article_id']);		$this->redis->exec();}// 读取文章列表get_articles_by_score($create_time_star, $create_time_end){		return $this->redis->zRevRangeByScore('article:list', "$create_time_star" , "$create_time_end", ['withscores' => true, 'limit' => [0, $this->pagesize]]);}

参考:

转载地址:http://dnuzz.baihongyu.com/

你可能感兴趣的文章