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)];
}
}