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

原創文章,作者:DVGW,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/137927.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
DVGW的頭像DVGW
上一篇 2024-10-04 00:18
下一篇 2024-10-04 00:18

相關推薦

發表回復

登錄後才能評論