php+redis实现点赞功能

这篇博客介绍了如何使用PHP结合Redis实现文章的点赞与取消点赞功能。通过Redis的set和hash结构存储点赞信息,确保用户只能点赞一次。文章详细阐述了代码实现过程,并展示了在Redis客户端查看操作结果。点击一次接口为点赞,再次点击则取消点赞,同时更新文章的点赞总数。
摘要由CSDN通过智能技术生成
php+redis实现点赞功能

首先设计redis

1、设计一个set结构的article存储被点赞的article_id

2、设计set结构的article_like_{article_id}里面存储点赞该文章的用户

3、设计一个hash结构的article_user_like_{article_id}__{user_id}存储用户点赞的详细信息

4、设计一个string结构的article_id_count存储文章的点赞总数

下面是我使用CI框架实现的具体功能代码:

这里我目前只使用了redis实现,后续会实现redis以及mysql的实现。这里使用的redis方法是之前封装的redis单例类。

common_helper文件中有一个获取redis单例的方法

/*
 * 加载libraries
 */

if (!function_exists('require_class')) {
    function require_class($name)
    {
        require_once('application' . DIRECTORY_SEPARATOR . 'libraries' . DIRECTORY_SEPARATOR . $name . '.php');
    }
}

/*
 * 获取redis连接
 */
if (!function_exists('getRedis')) {
    function getRedis()
    {
        require_class('RedisCurd');
        return RedisCurd::getInstance();
    }
}

控制器代码,这里点击一次该接口为点赞,再次点击则会取消点赞,且一个用户只可以为一篇文章点一次赞。

/*
* 文章点赞/取消点赞
 */
public function fabulous()
{
    $data = $this->input->post();
    if (empty($data['user_id'])) {
        fail('400', '点赞异常!');
    }
    if (empty($data['article_id'])) {
        fail('400', '点赞异常!');
    }
    //set类型存储全部点赞的文章
    $conn = getRedis();
    $conn->selectDb(0);
    $key1 = "like_article";
    //该文章是否已经在set中
    if (!$conn->sisMember($key1, $data['article_id'])) {
        $conn->sAdd($key1, $data['article_id']);
    }
    //set类型存储点赞文章的用户id
    $key2 = "user_like" . $data['article_id'];
    //该文章是否已经被该用户点赞
    $status = $conn->sisMember($key2, $data['user_id']);
    //hash类型存储点赞的详细信息
    $key3 = $data['user_id'] . "_like_" . $data['article_id'];
    if (!$status) {
        $conn->sAdd($key2, $data['user_id']);
        $res = [
            'user_id' => $data['user_id'],
            'article_id' => $data['article_id'],
            'create_time' => time()
        ];
        $conn->hMSet($key3, $res);
    }
    //存储文章点赞总数
    $key4 = "article_" . $data['article_id'] . "_count";
    //若该用户未给该文章点赞
    if (!$status) {
        $conn->incr($key4);
    } else {
        //已经点赞了删除hash集合
        $conn->del($key3);
        $conn->del($key2);
        $conn->decr($key4);
    }
    //点赞总数
    $res = $conn->get($key4);
    success($res, '点赞成功!');
}

使用postman调用接口查看点赞结果

在这里插入图片描述

这里从redis的客户端查看是否存在前面设置的redis的key

在这里插入图片描述

再次点击运行结果

在这里插入图片描述

在这里插入图片描述

这里已经没有hash和存储点赞文章的用户id的set了。文章点赞总数的set也变成0了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值