Redis场景应用:详细实现网站粉丝关注与展示的功能

这篇具有很好参考价值的文章主要介绍了Redis场景应用:详细实现网站粉丝关注与展示的功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Redis场景应用:详细实现网站粉丝关注与展示的功能,PHP进阶实战教程?,redis,数据库,PHP,用户关注功能实现

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。多年电商行业从业经验,对系统架构,数据分析处理等大规模应用场景有丰富经验。
🏆本文已收录于PHP专栏:PHP进阶实战教程。
🏆另有专栏PHP入门基础教程,希望各位大佬多多支持❤️。


🚀一、背景

在一个社交网络系统中,关注功能是非常重要的功能之一。用户可以关注其他用户,并查看自己关注了哪些人,以及哪些人关注了自己。如下面就是CSDN我关注的人。

Redis场景应用:详细实现网站粉丝关注与展示的功能,PHP进阶实战教程?,redis,数据库,PHP,用户关注功能实现

本篇博文将详细介绍如何利用PHP、Redis和MySQL来实现关注功能,并给出具体的实现步骤和代码。

🚀二、数据库结构设计

在写代码之前,我们需要两张表,一张是用户表(users),另一张是关注关系表(follows)。来表示关注与被关注之间的关系。因为Redis主要是作为缓存使用,在大规模访问前提下,Redis用于缓存数据来使用,为了保证数据的安全性,最终还是要把关注关系写入到数据库,这个后面会讲到。

🔎2.1 用户表(users)

字段名 类型 描述
id int(11) 用户ID
name varchar(255) 用户名称

🔎2.2 关注关系表(follows)

字段名 类型 描述
id int(11) 关注关系ID
follower_id int(11) 被关注者ID
following_id int(11) 关注者ID
created_at datetime 关注关系创建时间

关注关系表中,follower_id 表示被关注者ID,following_id表示关注者ID。

🚀三、实现步骤和代码

🔎3.1 创建数据库和表

首先,我们需要创建一个数据库,并创建两张表 users 和 follows。可以使用以下的SQL语句来创建相应的数据库和表:

CREATE TABLE users (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255)
);

CREATE TABLE follows (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    follower_id INT(11),
    following_id INT(11),
    created_at DATETIME
);

🔎3.2 安装 Redis 和相关 PHP 扩展

为了实现关注功能,我们需要使用 Redis 来存储关注数据,并利用 PHP 扩展来操作 Redis。首先,我们需要安装 Redis 扩展,如果已经存在此扩展,可以省略这个步骤。

查看是否安装了这个扩展可以通过php -m命令进行查看当前PHP生效的扩展。

然后,我们需要安装 PHP 的 Redis 扩展来连接 Redis 服务器。可以使用以下命令来安装 Redis 扩展:

pecl install redis

安装完成后,编辑 php.ini 文件,添加以下内容:

extension=redis.so

重启你的 web 服务器使配置生效。

🔎3.3 编写 PHP 代码

🍁3.3.1 连接 Redis 和 MySQL 数据库

首先,我们需要在 PHP 代码中连接 Redis 和 MySQL 数据库。可以创建一个 config.php 配置文件,用于存储数据库连接的相关信息。示例 config.php 内容如下:

<?php

$redis_host = '127.0.0.1';
$redis_port = 6379;
$redis_password = null;
$mysql_host = 'localhost';
$mysql_user = 'root';
$mysql_password = 'password';
$mysql_db = 'social_network';

$redis = new Redis();
$redis->connect($redis_host, $redis_port);
if ($redis_password) {
    $redis->auth($redis_password);
}

$pdo = new PDO("mysql:host=$mysql_host;dbname=$mysql_db", $mysql_user, $mysql_password);

🍁3.3.2 关注功能实现

接下来,我们将编写 PHP 代码来实现关注功能。示例代码如下:

<?php

require_once 'config.php';

function followUser($followerId, $followingId)
{
    global $redis, $pdo;

    // 将关注关系存储到 Redis set 中
    $redis->sAdd("following:$followerId", $followingId);
    $redis->sAdd("followers:$followingId", $followerId);
}

function unfollowUser($followerId, $followingId)
{
    global $redis, $pdo;

    // 从 Redis set 中删除关注关系
    $redis->sRem("following:$followerId", $followingId);
    $redis->sRem("followers:$followingId", $followerId);
}

function getFollowing($userId)
{
    global $redis, $pdo;

    // 从 Redis set 中获取我关注的人的 ID 列表
    $followingIds = $redis->sMembers("following:$userId");

    if (empty($followingIds)) {
        return [];
    }
}

function getFollowers($userId)
{
    global $redis, $pdo;

    // 从 Redis set 中获取关注我的人的 ID 列表
    $followerIds = $redis->sMembers("followers:$userId");

    if (empty($followerIds)) {
        return [];
    }
}

🍁3.3.3 定时同步关注数据到数据库

为了保证 Redis 中的关注关系数据与 MySQL 数据库中的数据一致,我们可以使用定时任务来定期将关注数据同步到数据库中(文件命名为sync.php)。放入如下代码:

<?php

require_once 'config.php';

function syncFollowData()
{
    global $redis, $pdo;

    // 获取 Redis set 中的所有关注关系
    $follows = $redis->smembers("follows");

    if (empty($follows)) {
        return;
    }

    // 清空 MySQL 数据库中的关注关系表
    $pdo->query('TRUNCATE TABLE follows');

    // 将关注关系存储到 MySQL 数据库中
    foreach ($follows as $follow) {
        list($followerId, $followingId) = explode(':', $follow);
        $stmt = $pdo->prepare('INSERT INTO follows (follower_id, following_id, created_at) VALUES (?, ?, NOW())');
        $stmt->execute([$followerId, $followingId]);
    }
}

syncFollowData();

上述的代码是一个核心的演示,实际应用的场景过程中,可能关注的量非常大,要采取增量插入或者按照用户区分关注列表处理,请结合实际情况灵活应用,不可完全按照上面代码设计。

🍁3.3.4 定时任务设置

最后,我们需要设置定时任务来定期执行关注数据的同步。这里我们通过使用 cron 表达式来指定执行时间间隔。例如,每小时执行一次同步操作的 cron 表达式为 0 * * * *

根据你的服务器环境不同,设置定时任务的方法也会有所不同。以 Linux 系统为例,可以使用以下命令来编辑 crontab:

crontab -e

然后,在 crontab 文件中添加以下内容:

0 * * * * /usr/bin/php /path/to/sync.php

保存并退出编辑器,即可完成定时任务的设置。

🚀四、总结

本篇博文详细介绍了如何利用 PHP、Redis 和 MySQL 来实现关注功能,并给出了具体的实现步骤和代码。通过 Redis 存储关注数据,可以提高查询效率和扩展性,而使用 MySQL 存储关注数据则更适合持久化存储和数据备份。实际过程中可能遇到的情况更加多样,不过核心的逻辑就是这些了。
Redis场景应用:详细实现网站粉丝关注与展示的功能,PHP进阶实战教程?,redis,数据库,PHP,用户关注功能实现
后面将会分享更多的实战经验,我们下次见。文章来源地址https://www.toymoban.com/news/detail-625009.html

到了这里,关于Redis场景应用:详细实现网站粉丝关注与展示的功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 高并发系统设计 -- 粉丝关注列表如何设计

    上图我们简称relation页。relation页展示用户的关系相关信息,包含两个子页面: follower页,展示关注该用户的所有用户信息。 attention页,展示该用户关注的所有用户信息 用户可以为自己增加,删除attention,即关注某个其他用户或者对其他用户取消关注。可以删除follower,即取

    2024年02月01日
    浏览(38)
  • redis 实现互相关注功能

    突然想到平时的设计软件如何实现互相关注这个功能,然后查询后大致思路如下: 可以使用 Redis 数据库来存储关注关系。 在社交网络应用程序中,互相关注功能(也称为双向关注或好友关系)是一种常见的功能,允许用户之间相互关注彼此。在Redis中,可以使用集合(Set)

    2024年02月07日
    浏览(31)
  • 华为云应用中间件DCS系列—Redis实现(电商网站)秒杀抢购示例

    云服务、API、SDK,调试,查看,我都行 阅读短文您可以学习到:应用中间件系列之Redis实现(电商网站)秒杀抢购示例 华为云开发者插件(Huawei Cloud Toolkit),作为华为云围绕其产品能力向开发者桌面上的延伸,帮助开发者快速在本地连接华为云,打通华为云到开发者的最后

    2024年02月07日
    浏览(29)
  • 微信小程序中引导用户关注公众号实现方案详细说明

        之前讲过如何利用公众号针对指定用户完成业务操作之后实时发送消息.就好比在线医院公众号中看病挂号,挂号预约成功之后微信列表中会新增一条关注的公众号预约成功消息.具体实现步骤可以看下文章如何实现:手把手教你微信公众号如何给指定用户发送消息提醒,

    2024年02月09日
    浏览(35)
  • Redis常用应用场景

    Redis是一款开源的基于内存的键值存储系统,它提供了多种数据结构和丰富的功能,适用于各种不同的应用场景。以下是Redis常用的应用场景: 1. 缓存 :Redis最常见的用途就是作为缓存。由于Redis存储在内存中,读取速度非常快,可以显著减轻数据库的负载。将频繁读取的数据

    2024年02月08日
    浏览(28)
  • Redis探秘:十大最佳应用场景揭示

    强烈推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站: 人工智能 前言: 在当今的软件开发和系统架构中,Redis 已经成为了不可或缺的重要组件之一。 其快速、灵活以及丰富的功能使得它在各种场景下都能发挥

    2024年04月16日
    浏览(28)
  • Redis数据类型详解与应用场景

    目录 1. 字符串(String) 1.1 使用场景 1.2 代码示例 2. 列表(List) 2.1 使用场景 2.2 代码示例 3. 集合(Set) 3.1 使用场景 3.2 代码示例 4. 散列(Hash) 4.1 使用场景 4.2 代码示例 5. 有序集合(Sorted Set) 5.1 使用场景 5.2 代码示例 6. 二进制位图(Bitmap) 6.1 使用场景 6.2 代码示例 7.

    2024年01月22日
    浏览(33)
  • Redis最常见的5种应用场景

    Redis作为当今最流行的内存数据库,已经成为服务端加速的必备工具之一。对于Redis为什么那么快?以及Redis采用单线程,但为什么反而获得更高的性能的疑问,在之前的Redis为什么那么快?一文中,已经有所介绍。 今天通过这篇,我们来了解一下Redis最常见的5种应用场景。您

    2024年02月08日
    浏览(21)
  • 【Redis】九种数据类型及应用场景

    Redis是一个开源的,基于内存的数据结构存储系统,可以用作数据库、缓存和消息中间件。它支持多种数据类型,包括字符串(String)、哈希表(Hash)、列表(List)、集合(Set)、有序集合(ZSet )、地理空间(Geo)、位图(Bitmaps)、基数统计(HyperLogLog)、流信息(Stream

    2024年01月19日
    浏览(28)
  • Redis数据结构应用场景及原理分析

    目录 一、Redis介绍 二、应用场景  2.1 String应用场景  2.2 Hash应用场景   2.3 List应用场景 2.4 Set应用场景  2.5 Zset应用场景  单线程 多路复用 底层数据结构:全局哈希表(key-value) 单值缓存 set key value get key  对象缓存 set user:1 userJson(Json格式数据) 分布式锁 set product:1 true

    2024年02月10日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包