今天分享一个常见面试题如何实现点赞关注功能

下面笔者将深入浅出给出这个面试的解答,笔者不仅会分享思路,而且还会给出具体代码实现,帮助读者更好地完全理解功能实现

其实实现点赞关注功能,它考察的主要是Redis应用

点赞功能

点赞功能的实现思路

  1. 数据存储使用 Redis集合(Set数据结构存储每个帖子点赞用户列表集合无序的,且每个元素都是唯一的,适合用于点赞场景
  2. 点赞操作:当用户点赞一个帖子时,将用户ID添加到该帖子的点赞集合中。
  3. 取消点赞操作:当用户取消点赞时,从集合移除用户ID。
  4. 查询操作检查用户是否点赞:查询用户ID是否帖子的点赞集合中。获取点赞数量:计算集合中的元素数量。
  5. 性能考虑:Redis 是一个高性能内存数据库,适合处理此类高频率读写操作使用 Redis 集合可以有效支持大量用户的点赞操作,同时保证数据一致性快速访问
  6. 扩展性:这种实现方式易于扩展可以添加更多功能,如点赞列表获取、点赞用户的分页显示等。

下面给出代码实现:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class LikeService {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    // 点赞
    public void likePost(String userId, String postId) {
        redisTemplate.opsForSet().add("postLikes:" + postId, userId);
    }

    // 取消点赞
    public void unlikePost(String userId, String postId) {
        redisTemplate.opsForSet().remove("postLikes:" + postId, userId);
    }

    // 检查用户是否点赞
    public boolean isLiked(String userId, String postId) {
        return redisTemplate.opsForSet().isMember("postLikes:" + postId, userId);
    }

    // 获取点赞数量
    public long getLikesCount(String postId) {
        return redisTemplate.opsForSet().size("postLikes:" + postId);
    }
}

接下来详细解释每行代码的用处。

点赞功能 (likePost 方法):

取消点赞功能 (unlikePost 方法):

检查是否点赞 (isLiked 方法):

获取点赞数量 (getLikesCount 方法):

关注功能

关注功能的实现思路

使用 Redis 的集合(Set)数据结构存储每个用户的关注列表userFollows:userId)和粉丝列表userFollowers:userId)。集合中的每个元素都是唯一的,这符合关注功能的需求

关注功能的核心逻辑包括两个部分:关注(follow)和取消关注(unfollow)。

下面给出代码实现:

@Service
public class FollowService {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    // 关注
    public void followUser(String userId, String followUserId) {
        redisTemplate.opsForSet().add("userFollows:" + userId, followUserId);
        redisTemplate.opsForSet().add("userFollowers:" + followUserId, userId);
    }

    // 取消关注
    public void unfollowUser(String userId, String followUserId) {
        redisTemplate.opsForSet().remove("userFollows:" + userId, followUserId);
        redisTemplate.opsForSet().remove("userFollowers:" + followUserId, userId);
    }

    // 获取关注列表
    public Set<String> getFollows(String userId) {
        return redisTemplate.opsForSet().members("userFollows:" + userId);
    }

    // 获取粉丝列表
    public Set<String> getFollowers(String userId) {
        return redisTemplate.opsForSet().members("userFollowers:" + userId);
    }
}

接下来详细解释每行代码的用处。

关注功能(followUser方法)这个方法用于实现我(userId)去关注谁(followUserId)的功能。这样,每个用户的关注列表粉丝列表都被维护在 Redis 中。

取关功能(unfollowUser方法)这个方法用于实现我(userId)去取关谁(followUserId)的功能。

  • 参数:userId(用户ID),followUserId(被关注用户ID)
  • 实现:redisTemplate.opsForSet().remove("userFollows:" + userId, followUserId)这行代码实现的是从 userId 的关注列表中移除 followUserIdredisTemplate.opsForSet().remove("userFollowers:" + followUserId, userId)这行代码实现的是从 followUserId 的粉丝列表中移除 userId

获取关注列表(getFollows方法)这个方法用于获取我(userId)的关注列表。

  • 参数:userId(用户ID)
  • 实现:redisTemplate.opsForSet().members("userFollows:" + userId)这行代码通过"userFollows:" + userIdredis中查询出用户userId的关注列表。

获取粉丝列表(getFollowers方法)这个方法用于获取我(userId)的粉丝列表。

  • 参数:userId(用户ID)
  • 实现:redisTemplate.opsForSet().members("userFollowers:" + userId)这行代码通过"userFollowers:" + userIdredis中查询出用户userId的粉丝列表。

学完如何实现点赞和关注功能后,还不能给博主点赞+收藏+关注嘛~

原文地址:https://blog.csdn.net/qq_45832461/article/details/134668699

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_40872.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注