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-hant/n/137927.html