重学SpringBoot3-集成Redis(十二)之点赞功能实现

在现代的Web应用中,点赞功能是非常常见的一个互动机制,它允许用户对内容进行表态。今天我们将利用Spring Boot 3和Redis来实现一个简单的点赞功能。由于Redis的高效性,我们可以利用它的特性来实现高并发点赞。

1. 环境准备

在开始之前,请确保你已经搭建了Spring Boot的开发环境,并且已经集成了Redis。可以通过以下依赖来引入Spring Boot和Redis的支持:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

2. Redis配置

application.yml文件中配置Redis连接信息:

spring:
  redis:
    host: localhost
    port: 6379

请根据你的Redis服务来调整host和port。

3. 创建点赞的业务逻辑

我们需要创建一个服务类来处理点赞的逻辑。下面是一个简单的实现:

@Service
public class LikeService {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    private static final String LIKE_KEY_PREFIX = "post:likes:"; // Redis键前缀

    public void likePost(String postId, String userId) {
        // 使用Set防止用户重复点赞
        String key = LIKE_KEY_PREFIX + postId;
        stringRedisTemplate.opsForSet().add(key, userId);
    }

    public long countLikes(String postId) {
        String key = LIKE_KEY_PREFIX + postId;
        return stringRedisTemplate.opsForSet().size(key);
    }

    public boolean hasLiked(String postId, String userId) {
        String key = LIKE_KEY_PREFIX + postId;
        return stringRedisTemplate.opsForSet().isMember(key, userId);
    }
}

解释:

  1. likePost: 此方法允许用户对某个帖子的点赞。我们使用Redis的Set来存储用户的ID,以避免用户重复点赞。
  2. countLikes: 此方法返回某个帖子的点赞数。
  3. hasLiked: 此方法检查某个用户是否已经对该帖子进行了点赞。

4. 创建Controller

接下来,我们需要创建一个控制器来处理点赞请求:

@RestController
@RequestMapping("/posts")
public class PostController {

    @Autowired
    private LikeService likeService;

    @PostMapping("/{postId}/like")
    public ResponseEntity<String> like(@PathVariable String postId, @RequestParam String userId) {
        if (likeService.hasLiked(postId, userId)) {
            return ResponseEntity.badRequest().body("用户已点赞");
        }
        likeService.likePost(postId, userId);
        return ResponseEntity.ok("点赞成功");
    }

    @GetMapping("/{postId}/likes")
    public ResponseEntity<Long> getLikes(@PathVariable String postId) {
        long likesCount = likeService.countLikes(postId);
        return ResponseEntity.ok(likesCount);
    }
}

解释:

  1. like方法处理用户的点赞请求。如果用户已经点赞,则返回错误信息;否则,点赞成功。
  2. getLikes方法返回某个帖子的点赞总数。

5. 测试

启动Spring Boot应用后,通过Postman等工具可以进行接口测试:

  • 点赞请求:
POST /posts/{postId}/like?userId={userId}
  • 获取点赞数请求:
GET /posts/{postId}/likes

6. 总结

以上就是使用Spring Boot 3和Redis实现简单点赞功能的完整示例。通过Redis的Set,我们能够高效且简洁地管理用户的点赞行为,同时避免重复点赞的情况。在实际项目中,可以结合更多功能,如解除点赞、记录点赞时间等,来增强业务逻辑的完整性。

希望这篇文章能够帮助大家更好地理解Spring Boot和Redis的结合使用,以及如何实现简单的点赞功能!

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部