点赞功能的一般设计思路是:使用一个数据模型来表示点赞,包括点赞的用户ID和被点赞的内容ID。将点赞信息存储在数据库中,可以跟踪用户点赞的内容。在前端提供点赞按钮,用户点击按钮触发点赞操作。后端接收点赞请求,检查用户是否已经点赞,如果没有点赞则将点赞信息存储到数据库中。可以为每个内容维护一个点赞计数,以便在前端显示点赞数量。确保验证请求,防止未经授权的用户进行点赞操作。
使用Redis实现点赞功能的基本步骤包括:
- 当用户点赞时,将用户ID和内容ID存储在Redis集合中。
- 当用户取消点赞时,从Redis集合中移除相应的用户ID。
- 使用Redis的集合操作来获取点赞数量,例如使用SCARD命令计算集合的大小。
- 使用SISMEMBER命令检查用户是否已经点赞了某个内容。
- 定期将点赞数据从Redis同步到数据库,以防止数据丢失。
以上是点赞功能的一般设计思路和使用Redis实现的简要步骤。
下面是原生PHP的示例代码,大家可以参考。
<?php
/** 使用方法 */
$like = new Like(1023,'article');//实例化文章1023的点赞服务
$like->like(1);//用户1点赞
$like->isLike(1);//用户1 是否已赞
#[AllowDynamicProperties]
class Like
{
/** @var Redis Redis实例 */
protected Redis $redis;
/** @var string redis key */
protected string $redis_key;
public function __construct(readonly public int $data_id, readonly public string $data_type)
{
$this->redis = new Redis();
$this->key = "like_set:{$this->data_type}_$this->data_id";//set结构
}
/**
* 喜欢某个内容
* @param int $from_user_id 点赞用户
* @return bool|int|Redis
*/
public function like(int $from_user_id): bool|int|Redis
{
return $this->redis->sAdd($this->key, $from_user_id);//将用户ID添加到内容的点赞集合中
}
/**
* @param int $from_user_id 取消点赞用户
* @return false|int|Redis
*/
public function unLike(int $from_user_id): false|int|Redis
{
return $this->redis->sRem($this->key, $from_user_id);//从内容的点赞集合中移除用户ID
}
/**
* 获取点赞数量
* @return false|int|Redis
*/
public function count(): false|int|Redis
{
try {
return $this->redis->sCard($this->key);
} catch (RedisException $e) {
return 0;
}
}
/**
* @param int $from_user_id
* @return bool|Redis
*/
public function isLike(int $from_user_id): bool|Redis
{
try {
return $this->redis->sIsMember($this->key, $from_user_id);//使用SISMEMBER命令检查用户ID是否存在于集合中
} catch (RedisException $e) {
return false;
}
}
}
同步到数据库的代码,这里就不写了。。。大家伙自己实现吧。