基于springboot2 redis set实现,交集、并集、差集的操作,计算共同喜好,全部的喜好,自己独有的喜好等功能

在Spring Boot 2和Redis中使用Set结构,可以实现全局去重、判断元素是否在Set中、以及集合运算(交集、并集、差集)等功能。以下是一个简单的示例代码:

  1. 添加Redis依赖:

    pom.xml 中添加 Spring Boot 对 Redis 的支持:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    
  2. 配置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

  3. 编写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 中,intersectSetsunionSetsdifferenceSets 方法分别用于计算两个 Set 的交集、并集和差集。

  4. 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 的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值