基于 Redis + PHP 实现 24小时新闻推荐系统

产品描述:
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]]);
}

参考:
https://redis.io/

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡德咏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值