SpringBoot整合Redis实现点赞、收藏功能

前言

点赞、收藏功能作为常见的社交功能,是众多Web应用中必不可少的功能之一。而redis作为一个基于内存的高性能key-value存储数据库,可以用来实现这些功能。

本文将介绍如何使用spring boot整合redis实现点赞、收藏功能,并提供前后端页面的编写代码。

准备工作

在开始之前,您需要进行以下准备工作:

  1. 安装JDK
  2. 安装Redis,并启动Redis服务
  3. 安装Node.js和Vue.js,以便我们能够开发前端页面

后端实现

在后端中,我们需要使用spring boot来整合redis,并进行相关的接口设计和实现。下面是实现点赞和收藏的核心代码。

相关依赖

首先,在pom.xml文件中添加redis相关依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.10.0</version>
</dependency>

Redis配置

接下来,我们需要配置Redis连接信息,可以在application.yml中进行配置。

spring:
  redis:
    host: localhost
    port: 6379

点赞功能实现

下面是点赞功能的接口实现代码。

@RestController
@RequestMapping("/like")
public class LikeController {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @PostMapping("/add")
    public String addLike(@RequestParam String userId, @RequestParam String objectId) {
        String key = "like:" + objectId;
        long result = redisTemplate.opsForSet().add(key, userId);
        return result > 0 ? "点赞成功" : "不能重复点赞";
    }

    @PostMapping("/delete")
    public String deleteLike(@RequestParam String userId, @RequestParam String objectId) {
        String key = "like:" + objectId;
        long result = redisTemplate.opsForSet().remove(key, userId);
        return result > 0 ? "取消点赞" : "未进行点赞";
    }

    @GetMapping("/count")
    public long countLike(@RequestParam String objectId) {
        String key = "like:" + objectId;
        return redisTemplate.opsForSet().size(key);
    }
}

收藏功能实现

下面是收藏功能的接口实现代码。

@RestController
@RequestMapping("/favorite")
public class FavoriteController {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @PostMapping("/add")
    public String addFavorite(@RequestParam String userId, @RequestParam String objectId) {
        String key = "favorite:" + userId;
        long result = redisTemplate.opsForSet().add(key, objectId);
        return result > 0 ? "收藏成功" : "不能重复收藏";
    }

    @PostMapping("/delete")
    public String deleteFavorite(@RequestParam String userId, @RequestParam String objectId) {
        String key = "favorite:" + userId;
        long result = redisTemplate.opsForSet().remove(key, objectId);
        return result > 0 ? "取消收藏" : "未进行收藏";
    }

    @GetMapping("/count")
    public long countFavorite(@RequestParam String userId) {
        String key = "favorite:" + userId;
        return redisTemplate.opsForSet().size(key);
    }

    @GetMapping("/list")
    public Set<String> listFavorite(@RequestParam String userId) {
        String key = "favorite:" + userId;
        return redisTemplate.opsForSet().members(key);
    }
}

前端实现

在前端中,我们使用Vue.js来编写页面,并调用后端提供的接口。下面是点赞、收藏功能的页面实现代码。

点赞

点赞功能页面代码

<template>
  <div>
    <button @click="addLike">点赞</button>
    <button @click="deleteLike">取消点赞</button>
    <span>点赞数:{{likeCount}}</span>
  </div>
</template>

<script>
import axios from 'axios'

export default {
  name: 'Like',
  data () {
    return {
      userId: '123', // 用户id, 从登录状态中取得
      objectId: '1', // 对象id, 从url参数中取得
      likeCount: 0 // 点赞数
    }
  },
  methods: {
    addLike () {
      axios.post('/like/add', {
        userId: this.userId,
        objectId: this.objectId
      })
      .then(response => {
        alert(response.data)
        if (response.data === '点赞成功') {
          this.likeCount++
        }
      })
      .catch(error => {
        console.log(error)
      })
    },
    deleteLike () {
      axios.post('/like/delete', {
        userId: this.userId,
        objectId: this.objectId
      })
      .then(response => {
        alert(response.data)
        if (response.data === '取消点赞') {
          this.likeCount--
        }
      })
      .catch(error => {
        console.log(error)
      })
    },
    countLike () {
      axios.get('/like/count', {
        params: {
          objectId: this.objectId
        }
      })
      .then(response => {
        this.likeCount = response.data
      })
      .catch(error => {
        console.log(error)
      })
    }
  },
  mounted () {
    this.countLike()
  }
}
</script>

收藏

收藏功能页面代码

<template>
  <div>
    <button @click="addFavorite">收藏</button>
    <button @click="deleteFavorite">取消收藏</button>
    <span>收藏数:{{favoriteCount}}</span>
    <ul>
      <li v-for="item in favoriteList" :key="item">{{item}}</li>
    </ul>
  </div>
</template>

<script>
import axios from 'axios'

export default {
  name: 'Favorite',
  data () {
    return {
      userId: '123', // 用户id, 从登录状态中取得
      objectId: '1', // 对象id, 从url参数中取得
      favoriteCount: 0, // 收藏数
      favoriteList: [] // 收藏列表
    }
  },
  methods: {
    addFavorite () {
      axios.post('/favorite/add', {
        userId: this.userId,
        objectId: this.objectId
      })
      .then(response => {
        alert(response.data)
        if (response.data === '收藏成功') {
          this.favoriteCount++
        }
      })
      .catch(error => {
        console.log(error)
      })
    },
    deleteFavorite () {
      axios.post('/favorite/delete', {
        userId: this.userId,
        objectId: this.objectId
      })
      .then(response => {
        alert(response.data)
        if (response.data === '取消收藏') {
          this.favoriteCount--
          this.favoriteList = this.favoriteList.filter(item => item !== this.objectId)
        }
      })
      .catch(error => {
        console.log(error)
      })
    },
    countFavorite () {
      axios.get('/favorite/count', {
        params: {
          userId: this.userId
        }
      })
      .then(response => {
        this.favoriteCount = response.data
      })
      .catch(error => {
        console.log(error)
      })
    },
    listFavorite () {
      axios.get('/favorite/list', {
        params: {
          userId: this.userId
        }
      })
      .then(response => {
        this.favoriteList = response.data
      })
      .catch(error => {
        console.log(error)
      })
    }
  },
  mounted () {
    this.countFavorite()
    this.listFavorite()
  }
}
</script>

总结

本文介绍了如何使用spring boot整合redis实现点赞、收藏功能,并提供了相关的前后端页面代码示例,希望能对您有所帮助。如果您有任何问题或建议,请在评论中留言,谢谢!

  • 10
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: Spring Boot整合Redis功能的简单实现步骤如下: 1. 首先,需要在pom.xml文件中添加Redis和Jedis的依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3..1</version> </dependency> ``` 2. 在application.properties文件中配置Redis的连接信息: ``` spring.redis.host=localhost spring.redis.port=6379 spring.redis.password= ``` 3. 创建一个RedisUtil类,用于连接Redis并提供点相关的方法: ``` @Component public class RedisUtil { @Autowired private RedisTemplate<String, Object> redisTemplate; public void like(String key, String value) { redisTemplate.opsForSet().add(key, value); } public void unlike(String key, String value) { redisTemplate.opsForSet().remove(key, value); } public boolean isLiked(String key, String value) { return redisTemplate.opsForSet().isMember(key, value); } public long countLikes(String key) { return redisTemplate.opsForSet().size(key); } } ``` 4. 在Controller中使用RedisUtil提供的方法实现功能: ``` @RestController public class LikeController { @Autowired private RedisUtil redisUtil; @PostMapping("/like") public void like(@RequestParam String key, @RequestParam String value) { redisUtil.like(key, value); } @PostMapping("/unlike") public void unlike(@RequestParam String key, @RequestParam String value) { redisUtil.unlike(key, value); } @GetMapping("/isLiked") public boolean isLiked(@RequestParam String key, @RequestParam String value) { return redisUtil.isLiked(key, value); } @GetMapping("/countLikes") public long countLikes(@RequestParam String key) { return redisUtil.countLikes(key); } } ``` 以上就是Spring Boot整合Redis功能的简单实现。 ### 回答2: Spring Boot和Redis都是非常流行的技术,它们都可以轻松地实现各种功能,其中包括点功能。本篇文章主要介绍如何使用Spring Boot和Redis实现一个简单的点功能。 1. 首先,我们要在pom.xml文件中添加Spring Boot的依赖,以及Jedis依赖。Jedis是一个专门与Redis交互的Java客户端,可以方便地操作Redis。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.6.3</version> </dependency> ``` 2. 接下来,我们要在application.properties文件中配置Redis连接信息。 ```properties spring.redis.database=0 spring.redis.host=localhost spring.redis.password= spring.redis.port=6379 ``` 3. 然后,我们要创建一个RedisTemplate实例,以便于操作Redis。 ```java @Configuration public class RedisConfig { @Bean JedisConnectionFactory jedisConnectionFactory() { return new JedisConnectionFactory(); } @Bean RedisTemplate<String, Object> redisTemplate() { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(jedisConnectionFactory()); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return redisTemplate; } } ``` 4. 接下来,我们要创建一个点服务实现类并注入RedisTemplate实例。 ```java @Service public class VoteServiceImpl implements VoteService { private final RedisTemplate<String, Object> redisTemplate; @Autowired public VoteServiceImpl(RedisTemplate<String, Object> redisTemplate) { this.redisTemplate = redisTemplate; } @Override public void vote(String userId, Long itemId) { String key = "vote:" + itemId; redisTemplate.opsForSet().add(key, userId); } @Override public Long count(Long itemId) { String key = "vote:" + itemId; return redisTemplate.opsForSet().size(key); } } ``` 在这个实现类中,我们创建了两个方法,vote和count,分别用来进行点和获取点数量。通过使用RedisTemplate实例的opsForSet方法,我们可以方便地对集合进行添加元素和获取元素的操作。 5. 最后,我们可以在Controller中调用这个服务类,实现功能。 ```java @RestController public class VoteController { private final VoteService voteService; @Autowired public VoteController(VoteService voteService) { this.voteService = voteService; } @PostMapping("/vote") public void vote(@RequestParam String userId, @RequestParam Long itemId) { voteService.vote(userId, itemId); } @GetMapping("/count") public Long count(@RequestParam Long itemId) { return voteService.count(itemId); } } ``` 至此,我们就只需要发送一个POST请求到"/vote"路径,并附带上userId和itemId参数,就可以对该itemId进行点了。而发送一个GET请求到"/count"路径,并附带上itemId参数,则可以获取到该itemId的点数。 短短几行代码就实现了点功能,而且使用Redis做后台存储,性能和稳定性都更好。在实际开发过程中,如果需要高并发、高可用的点功能Redis就是一种非常好的选择。 ### 回答3: SpringBoot是基于Spring框架的快速开发脚手架,而Redis是著名的内存数据库,具有高性能、分布式、数据持久化等特点。在实现功能时,我们常常使用Redis来存储点信息,以提高访问效率和减轻数据库的压力。 下面是SpringBoot整合Redis功能的简单实现步骤: 1. 引入相关依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 2. 配置Redis连接信息 在application.properties文件中配置Redis连接信息,例如: ``` spring.redis.host=127.0.0.1 spring.redis.port=6379 ``` 3. 创建Redis操作类 创建一个RedisUtil类,用于实现Redis的操作。例如: ``` @Component public class RedisUtil { @Autowired private RedisTemplate<String, Object> redisTemplate; public void increment(String key) { redisTemplate.opsForValue().increment(key); } public Long get(String key) { return (Long) redisTemplate.opsForValue().get(key); } public void set(String key, Object value) { redisTemplate.opsForValue().set(key, value); } } ``` 在该类中,我们使用@Autowired注解注入了RedisTemplate实例,调用其相关方法实现Redis的操作,例如增加点数、获取点数、设置点信息等。 4. 实现功能实现功能的Controller中,我们可以使用RedisUtil来操作Redis,例如: ``` @RestController public class LikeController { @Autowired private RedisUtil redisUtil; @GetMapping("/like/{id}") public String like(@PathVariable Long id) { String key = "article:like:" + id; redisUtil.increment(key); // 点数增加1 return "点成功"; } @GetMapping("/like/count/{id}") public Long count(@PathVariable Long id) { String key = "article:like:" + id; return redisUtil.get(key); // 获取点数 } } ``` 在这里,我们可以将Redis的键名定义为“article:like:{文章id}”,并使用increment方法实现数的增加。需要注意的是,我们可以使用String类型来存储点数,但是如果需要保证点数的原子性操作,我们可以使用Redis中提供的incr命令。 这样,我们就实现了点功能的简单实现。在实际生产中,我们可能还需要考虑点数的过期时间、防止重复点等问题,但是这里仅仅是提供了一个基础的实现思路。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沙漠真有鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值