Spring Boot整合RedisTemplate和Redisson

引言

Redis是一种高性能的key-value存储系统,常用于缓存、消息队列、排行榜等场景。Spring Boot是一个快速开发框架,提供了很多便利的功能和特性。本文将介绍如何使用Spring Boot整合RedisTemplate和Redisson,实现对Redis的使用和管理。

RedisTemplate

RedisTemplate是Spring Data Redis提供的一个模板类,封装了对Redis的常见操作,比如字符串、哈希、列表、集合、有序集合等。它提供了一系列的方法来简化Redis的使用。

在Spring Boot中,我们可以通过配置文件来配置RedisTemplate,并且可以直接注入到我们的代码中使用。

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }
}

上面的配置文件中,我们通过@Bean注解将RedisTemplate注入到IOC容器中。这里我们使用了默认的RedisConnectionFactory,也可以根据需要自定义。

接下来我们就可以在我们的代码中注入RedisTemplate,并使用它来操作Redis了。

@RestController
public class RedisController {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @GetMapping("/get")
    public String getValue(String key) {
        Object value = redisTemplate.opsForValue().get(key);
        return value != null ? value.toString() : null;
    }

    @PostMapping("/set")
    public void setValue(String key, String value) {
        redisTemplate.opsForValue().set(key, value);
    }
}

上面的代码中,我们在RedisController中注入了RedisTemplate,并使用它来操作Redis。通过@GetMapping和@PostMapping注解,我们可以定义接口来获取和设置Redis中的数据。

Redisson

Redisson是一个基于Redis的Java驻场存储库,它提供了分布式锁、分布式集合、分布式对象等功能。Redisson提供了对Redis的高级封装,使得我们可以更方便地使用Redis。

在Spring Boot中,我们可以通过添加Redisson的依赖来使用它。

<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.15.5</version>
</dependency>

在使用Redisson之前,我们需要配置Redis连接信息。

@Configuration
public class RedissonConfig {

    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.port}")
    private int port;

    @Bean
    public RedissonClient redissonClient() {
        Config config = new Config();
        config.useSingleServer().setAddress("redis://" + host + ":" + port);
        return Redisson.create(config);
    }
}

上面的配置文件中,我们通过@Bean注解将RedissonClient注入到IOC容器中。这里我们使用了单节点的Redis配置,也可以根据需要使用集群、哨兵等配置。

接下来我们就可以在我们的代码中注入RedissonClient,并使用它来操作Redis了。

@RestController
public class RedisController {

    @Autowired
    private RedissonClient redissonClient;

    @GetMapping("/lock")
    public void lock(String key) {
        RLock lock = redissonClient.getLock(key);
        lock.lock();
        try {
            // do something
        } finally {
            lock.unlock();
        }
    }

    @GetMapping("/list")
    public List<String> getList(String key) {
        RList<String> list = redissonClient.getList(key);
        return list.readAll();
    }
}

上面的代码中,我们在RedisController中注入了RedissonClient,并使用它来操作Redis。通过RLock可以实现分布式锁的功能,通过RList可以操作分布式列表。

整合RedisTemplate和Redisson

在一些场景中,我们可能需要同时使用RedisTemplate和Redisson来操作Redis。比如,我们可能需要使用RedisTemplate来操作一些简单的字符串和哈希,而使用Redisson来操作一些复杂的数据结构,比如分布式锁、分布式集合等。

在Spring Boot中,我们可以很方便地将RedisTemplate和Redisson整合在一起使用。

首先,我们需要在配置文件中配置RedisTemplate和Redisson: