您的位置:

Spring Boot集成Redis

Redis是一个开源的内存数据存储系统,常用于缓存和消息传递。它支持字符串、哈希表、列表、集合、有序集合的数据类型,并且支持事务、Lua脚本、LRU淘汰等特性。在Spring Boot应用中集成Redis可以帮助提高应用的性能和可扩展性。

一、Spring Boot集成Redisson

Redisson是基于Redis实现的分布式Java对象和服务库,它提供了许多分布式锁和并发集合,使得集群环境下的代码编写变得更加方便。Spring Boot通过引入Redisson依赖可以快速集成Redisson。 首先,在pom.xml中添加Redisson的依赖:

      <dependency>
          <groupId>org.redisson</groupId>
          <artifactId>redisson-spring-boot-starter</artifactId>
          <version>3.11.5</version>
      </dependency>
然后在application.properties中配置Redis连接信息:

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=yourpassword
在Java代码中可以直接使用Redisson提供的分布式锁和并发集合,如下所示:

      @Autowired
      private RedissonClient redissonClient;

      public void doSomething() {
          RLock lock = redissonClient.getLock("myLock");
          try {
              lock.lock();
              // do something in the critical section
          }finally {
              lock.unlock();
          }

          RMap<String, String> map = redissonClient.getMap("myMap");
          map.put("key", "value");
      }

二、Spring Boot集成MyBatis和Redis

MyBatis是一款优秀的Java持久层框架,它可以将Java对象和数据库表进行映射,简化了DAO层的代码。Spring Boot可以在MyBatis的基础上集成Redis,实现缓存的功能。 首先,在pom.xml中添加MyBatis和Redis的依赖:

      <dependency>
          <groupId>org.mybatis.spring.boot</groupId>
          <artifactId>mybatis-spring-boot-starter</artifactId>
          <version>2.1.3</version>
      </dependency>

      <dependency>
          <groupId>com.github.pagehelper</groupId>
          <artifactId>pagehelper-spring-boot-starter</artifactId>
          <version>1.2.5</version>
      </dependency>

      <dependency>
          <groupId>org.mybatis.caches.redis</groupId>
          <artifactId>redis-cache</artifactId>
          <version>1.0.3</version>
      </dependency>
其中,pagehelper-spring-boot-starter是MyBatis的分页插件,redis-cache是MyBatis与Redis的缓存插件。 然后在application.properties中配置MyBatis和Redis的连接信息:

spring.datasource.url=jdbc:mysql://localhost:3306/dbname
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.mybatis.model

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=yourpassword
在Java代码中,使用@Cacheable注解可以将结果缓存到Redis中,从而加速查询。如下所示:

      @Autowired
      private UserMapper userMapper;

      @Autowired
      private RedisTemplate redisTemplate;

      @Cacheable(value = "userCache", key = "#id")
      public User getUserById(Integer id) {
          // check cache
          User user = (User)redisTemplate.opsForValue().get("user:"+id);
          if(user != null) {
              return user;
          }

          // query from database
          user = userMapper.selectByPrimaryKey(id);

          // set cache
          redisTemplate.opsForValue().set("user:"+id, user, 10, TimeUnit.MINUTES);

          return user;
      }

三、Spring Boot集成Redis哨兵

Redis哨兵是一种特殊的Redis实例,它通过自动发现Redis主从节点并进行故障转移来增强Redis的高可用性。Spring Boot可以集成Redis哨兵来保证应用的稳定性。 首先,在pom.xml中添加Redisson的哨兵依赖:

      <dependency>
          <groupId>org.redisson</groupId>
          <artifactId>redisson-spring-boot-starter</artifactId>
          <version>3.11.5</version>
      </dependency>

      <dependency>
          <groupId>org.redisson</groupId>
          <artifactId>redisson-sentinel</artifactId>
          <version>3.11.5</version>
      </dependency>
然后在application.properties中配置Redis哨兵的连接信息:

spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381
spring.redis.password=yourpassword
在Java代码中可以使用Redisson提供的RedissonClient对象来操作Redis。同样的,它也提供了分布式锁和并发集合的支持。

四、Spring Boot集成Redis流程

Spring Boot集成Redis的流程如下: 1. 引入Redis的依赖 2. 配置Redis的连接信息 3. 在Java代码中使用RedisTemplate或RedissonClient操作Redis

五、Spring Boot集成Redis缓存

Spring Boot可以使用Spring Cache抽象来集成缓存的功能,它可以方便地切换不同的缓存实现,包括Redis。 首先,在pom.xml中添加Spring Cache和Redis的依赖:

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

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-redis</artifactId>
      </dependency>
然后在application.properties中配置Redis的连接信息:

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=yourpassword
在Java代码中,使用@Cacheable、@CachePut和@CacheEvict等注解可以直接操作Redis缓存。如下所示:

      @Cacheable(value = "userCache", key = "#id")
      public User getUserById(Integer id) {
          // query from database
          User user = userMapper.selectByPrimaryKey(id);
          return user;
      }

      @CachePut(value = "userCache", key = "#user.id")
      public User updateUser(User user) {
          // update in database
          userMapper.updateByPrimaryKeySelective(user);
          return user;
      }

      @CacheEvict(value = "userCache", key = "#id")
      public void deleteUserById(Integer id) {
          // delete from database
          userMapper.deleteByPrimaryKey(id);
      }

六、Spring Boot集成Redis Stream

Redis Stream是Redis5.0版本引入的数据类型,它是一个高性能、低延迟的可持久化消息队列,支持消息的顺序消费和消息重试机制。Spring Boot可以通过引入Lettuce或Jedis的依赖来集成Redis Stream。 首先,在pom.xml中添加Lettuce或Jedis的依赖:

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

      <dependency>
          <groupId>io.lettuce</groupId>
          <artifactId>lettuce-core</artifactId>
      </dependency>
然后在Java代码中可以使用RedisTemplate或Lettuce提供的API来操作Redis Stream。如下所示:

      // send a message to a Redis Stream
      redisTemplate.opsForStream().add("mystream", Collections.singletonMap("key", "value"));

      // consume messages from a Redis Stream
      StreamMessageListenerContainer<Object, ObjectRecord<Object, Object>> container =
          StreamMessageListenerContainer.create(redisTemplate.getConnectionFactory());
      StreamListener<Object, ObjectRecord<Object, Object>> listener =
          new StreamListener<Object, ObjectRecord<Object, Object>>() {
              @Override
              public void onMessage(ObjectRecord<Object, Object> record) {
                  // handle the received message
              }
          };
      String stream = "mystream";
      XReadOptions readOptions = StreamOffset.create(stream, ReadOffset.lastConsumed());
      container.receive(Consumer.from("mygroup", "myconsumer"), readOptions, listener);

七、Spring Boot集成Redis哨兵集群

Redis哨兵集群是由多个Redis哨兵节点组成的集群环境,它可以实现Redis的高可用和自动故障转移。Spring Boot可以集成Redis哨兵集群来提高应用的可用性。 首先,在pom.xml中添加Redisson的哨兵集群依赖:

      <dependency>
          <groupId>org.redisson</groupId>
          <artifactId>redisson-spring-boot-starter</artifactId>
          <version>3.11.5</version>
      </dependency>

      <dependency>
          <groupId>org.redisson</groupId>
          <artifactId>redisson-sentinel</artifactId>
          <version>3.11.5</version>
      </dependency>
然后在application.properties中配置Redis哨兵集群的连接信息:

spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381
spring.redis.password=yourpassword
在Java代码中,可以使用Redisson提供的RedissonCluster对象来操作Redis哨兵集群。如下所示:

      @Autowired
      private RedissonCluster redissonCluster;

      public void doSomething() {
          RLock lock = redissonCluster.getLock("myLock");
          try {
              lock.lock();
              // do something in the critical section
          }finally {
              lock.unlock();
          }

          RMap<String, String> map = redissonCluster.getMap("myMap");
          map.put("key", "value");
      }

八、Spring Boot集成Redis主从

Redis主从集群是由一个Redis主节点和多个Redis从节点组成的集群环境,它可以实现读写分离和高可用性。Spring Boot可以集成Redis主从集群来提高应用的性能和可用性。 首先,在pom.xml中添加Lettuce的依赖:

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

      <dependency>
          <groupId>io.lettuce</groupId>
          <artifactId>lettuce-core</artifactId>
      </dependency>
然后在application.properties中配置Redis主从集群的连接信息:

spring.redis.host