Redis 的 List存储一些列表型的数据结构,类似粉丝列表、文章列表

使用 Redis 的 List 结构可以高效地存储和管理类似粉丝列表、文章评论列表等顺序型数据。在这种情况下,List 结构支持快速的插入、删除和读取操作,非常适合处理需要按顺序存储的列表数据。

实现思路

  • 粉丝列表:可以将每个用户的粉丝 ID 存储在 Redis 的 List 中。
  • 文章评论列表:将每篇文章的评论 ID 或内容按顺序存储在 Redis 的 List 中。

1. 使用 Redis List 存储粉丝列表

插入粉丝到列表

使用 LPUSH 命令将新的粉丝 ID 插入到用户的粉丝列表中,这会将粉丝 ID 添加到列表的头部。

<?php
function addFollower($userId, $followerId) {
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);

    // 将followerId插入到userId的粉丝列表中
    $redis->lPush("followers:$userId", $followerId);
}

// 示例:为用户123添加粉丝456
addFollower(123, 456);

获取用户的粉丝列表

使用 LRANGE 命令获取用户的所有粉丝 ID。

<?php
function getFollowers($userId) {
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);

    // 获取userId的所有粉丝ID
    $followers = $redis->lRange("followers:$userId", 0, -1);
    return $followers;
}

// 示例:获取用户123的粉丝列表
$followers = getFollowers(123);
print_r($followers);

获取分页粉丝列表

如果粉丝列表较长,可以通过 LRANGE 配合分页获取部分粉丝数据。

<?php
function getFollowersByPage($userId, $page, $pageSize) {
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);

    // 计算起始和结束索引
    $start = ($page - 1) * $pageSize;
    $end = $start + $pageSize - 1;

    // 获取分页粉丝列表
    $followers = $redis->lRange("followers:$userId", $start, $end);
    return $followers;
}

// 示例:获取用户123的第一页粉丝列表,每页10个粉丝
$followers = getFollowersByPage(123, 1, 10);
print_r($followers);

2. 使用 Redis List 存储文章评论列表

添加评论到列表

使用 RPUSH 命令将评论添加到文章的评论列表中,保证评论按时间顺序存储。

<?php
function addComment($articleId, $comment) {
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);

    // 将评论添加到文章评论列表中
    $redis->rPush("comments:$articleId", $comment);
}

// 示例:为文章789添加评论"Great article!"
addComment(789, "Great article!");

获取文章的评论列表

使用 LRANGE 命令获取文章的所有评论。

<?php
function getComments($articleId) {
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);

    // 获取文章的所有评论
    $comments = $redis->lRange("comments:$articleId", 0, -1);
    return $comments;
}

// 示例:获取文章789的所有评论
$comments = getComments(789);
print_r($comments);

获取分页评论列表

同样可以使用分页的方式获取部分评论。

<?php
function getCommentsByPage($articleId, $page, $pageSize) {
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);

    // 计算起始和结束索引
    $start = ($page - 1) * $pageSize;
    $end = $start + $pageSize - 1;

    // 获取分页评论列表
    $comments = $redis->lRange("comments:$articleId", $start, $end);
    return $comments;
}

// 示例:获取文章789的第一页评论列表,每页10条评论
$comments = getCommentsByPage(789, 1, 10);
print_r($comments);

3. 数据持久化与同步

尽管 Redis 高效且快速,但为了防止数据丢失,通常需要将数据定期同步回 MySQL 等关系型数据库中,或者使用 Redis 的持久化功能(如 RDB 或 AOF)。

<?php
function syncFollowersToMySQL($userId) {
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);

    // 获取所有粉丝
    $followers = $redis->lRange("followers:$userId", 0, -1);

    $db = new mysqli('localhost', 'username', 'password', 'database');
    foreach ($followers as $followerId) {
        // 假设有一个粉丝表 follower_table(user_id, follower_id)
        $stmt = $db->prepare("INSERT INTO follower_table (user_id, follower_id) VALUES (?, ?) ON DUPLICATE KEY UPDATE user_id=user_id");
        $stmt->bind_param("ii", $userId, $followerId);
        $stmt->execute();
    }
}

// 示例:将用户123的粉丝列表同步到MySQL
syncFollowersToMySQL(123);

总结

通过 Redis 的 List 结构,可以高效地实现类似粉丝列表、文章评论列表等顺序型数据的存储和管理。Redis 提供的 List 操作具有很好的性能,特别适用于需要快速插入和读取的大量数据场景,同时可以结合分页操作和数据持久化机制,确保系统的稳定性和数据的可靠性。

 

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值