搜索

cover

使用redis实现关注粉丝功能(php版)

染念 染念

redis不用说啥了,比mysql有的是可以吹的地方,于是很多人选择用redis来实现这类操作频繁的场景
@(汗) 但是下午第一次安装redis花了好多时间...

这里借用[button href="https://www.jianshu.com/p/e3f0b98a78bc"]Redis实现用户关注功能[/button]的思路
于是有

<?php
namespace frag\lib;
class follow
{
    public static $redis;
    public function __construct()
    {
        // 连接redis
        self::$redis = new \Redis();
        self::$redis->connect(conf::get('IP', 'route'), 6379);
    }

    /**
     * 添加关注
     * @param int $follower uid
     * @param int $fan uid
     */
    public static function add($follower, $fan)
    {
        $name = $follower . ':follow';
        $other = $fan . ':fans';
        // 将对方id添加到自己的关注列表中
        self::$redis->zAdd($name, time(), $fan);
        //将自己的id添加到对方的粉丝列表中
        self::$redis->zAdd($other, time(), $follower);

    }

    /**
     * 取消关注
     * @param int $follower uid
     * @param int $fan uid
     */
    public static function del($follower, $fan)
    {
        $name = $follower . ':follow';
        $other = $fan . ':fans';
        // 将对方id从自己的关注列表中移除;
        self::$redis->zRem($name, $fan);
        // 将自己的id从对方的粉丝列表中移除
        self::$redis->zRem($other, $follower);
    }

    /**
     * 获取我的关注列表
     * @param $my
     * @return array
     */
    public static function getFollowList($my)
    {
        $name = $my . ':follow';
        return self::$redis->zRange($name, 0, -1);
    }

    /**
     * 获取我的粉丝列表
     * @param $my
     * @return array
     */
    public static function getFansList($my)
    {
        $name = $my . ':fans';
        return self::$redis->zRange($name, 0, -1);
    }

    /**
     * 人物关系
     * @param $my
     * @param $other
     * @return int
     */
    public static function relation($my, $other)
    {
        // 我关注了他 0
        // 他关注了我 1
        // 互相关注 2
        $myFans = $my . ':fans';
        $myFollow = $my . ':follow';
        $otherFans = $other . ':fans';
        $otherFollow = $other . ':follow';
        if (!self::$redis->zScore($myFans, $other) && self::$redis->zScore($myFollow, $other))
            return 0;
        elseif (!self::$redis->zScore($otherFans, $my) && self::$redis->zScore($otherFollow, $my))
            return 1;
        elseif (self::$redis->zScore($myFans, $other) && self::$redis->zScore($myFollow, $other))
            return 2;
    }

    /**
     * 返回我的关注数和粉丝数
     * @param $my
     * @return array
     */
    public static function count($my)
    {
        $myFans = $my . ':fans';
        $myFollow = $my . ':follow';
        return [self::$redis->zCard($myFollow), self::$redis->zCard($myFans)];
    }


}

redis

本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。

查看目录

目录

来自 《使用redis实现关注粉丝功能(php版)》

评论区



可能感兴趣