在Spring Boot 2和Redis中使用Set结构,可以实现全局去重、判断元素是否在Set中、以及集合运算(交集、并集、差集)等功能。以下是一个简单的示例代码:
-
添加Redis依赖:
在
pom.xml
中添加 Spring Boot 对 Redis 的支持:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
-
配置Redis连接信息:
在
application.properties
(或application.yml
)中配置 Redis 连接信息:spring.redis.host=your-redis-host spring.redis.port=your-redis-port spring.redis.password=your-redis-password
如果 Redis 没有密码,可以不配置
spring.redis.password
。 -
编写SetService类实现Set的操作:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.SetOperations; import org.springframework.stereotype.Service; import java.util.Set; @Service public class SetService { private final RedisTemplate<String, Object> redisTemplate; private final SetOperations<String, Object> setOperations; @Autowired public SetService(RedisTemplate<String, Object> redisTemplate) { this.redisTemplate = redisTemplate; this.setOperations = redisTemplate.opsForSet(); } public void addToSet(String setName, Object... values) { // 向Set中添加元素 setOperations.add(setName, values); } public Boolean isMember(String setName, Object value) { // 判断元素是否在Set中 return setOperations.isMember(setName, value); } public Set<Object> intersectSets(String set1, String set2) { // 计算两个Set的交集 return setOperations.intersect(set1, set2); } public Set<Object> unionSets(String set1, String set2) { // 计算两个Set的并集 return setOperations.union(set1, set2); } public Set<Object> differenceSets(String set1, String set2) { // 计算两个Set的差集 return setOperations.difference(set1, set2); } }
上述代码中,使用
SetOperations
进行 Set 类型的操作。addToSet
方法用于向 Set 中添加元素,isMember
方法用于判断元素是否在 Set 中,intersectSets
、unionSets
和differenceSets
方法分别用于计算两个 Set 的交集、并集和差集。 -
Controller层调用Service:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Set; @RestController @RequestMapping("/set") public class SetController { private final SetService setService; @Autowired public SetController(SetService setService) { this.setService = setService; } @PostMapping("/addToSet") public void addToSet(@RequestParam String setName, @RequestParam Object... values) { setService.addToSet(setName, values); } @GetMapping("/isMember") public Boolean isMember(@RequestParam String setName, @RequestParam Object value) { return setService.isMember(setName, value); } @GetMapping("/intersectSets") public Set<Object> intersectSets(@RequestParam String set1, @RequestParam String set2) { return setService.intersectSets(set1, set2); } @GetMapping("/unionSets") public Set<Object> unionSets(@RequestParam String set1, @RequestParam String set2) { return setService.unionSets(set1, set2); } @GetMapping("/differenceSets") public Set<Object> differenceSets(@RequestParam String set1, @RequestParam String set2) { return setService.differenceSets(set1, set2); } }
上述代码中,通过
@PostMapping
和@GetMapping
定义了向 Set 中添加元素、判断元素是否在 Set 中以及集合运算的接口。通过访问这些接口,可以实现对 Redis 中存储的 Set 的操作。