SpringBoot中间件

文章目录
  1. 1. Spring Boot 和 Redis 常用操作
    1. 1.1. spring-boot-starter-data-redis
    2. 1.2. 相关配置
      1. 1.2.1. 引入依赖包
      2. 1.2.2. application 配置
      3. 1.2.3. 缓存配置
    3. 1.3. 测试使用

Spring Boot 和 Redis 常用操作

spring-boot-starter-data-redis

Spring Boot 提供了对 Redis 集成的组件包:spring-boot-starter-data-redis,它依赖于 spring-data-redis 和 lettuce。Spring Boot 1.0 默认使⽤的是 Jedis 客户端,2.0 替换成了 Lettuce,但如果你从 Spring Boot 1.5.X 切换过来,⼏乎感受不⼤差异,这是因为 spring-boot-starter-data-redis 为我们隔离了其中的差异性。

  • Lettuce:是⼀个可伸缩线程安全的 Redis 客户端,多个线程可以共享同⼀个 RedisConnection,它利⽤优秀 Netty NIO 框架来⾼效地管理多个连接。
  • Spring Data:是 Spring 框架中的⼀个主要项⽬,⽬的是为了简化构建基于 Spring 框架应⽤的数据访问,包括⾮关系数据库、Map-Reduce 框架、云数据服务等,另外也包含对关系数据库的访问⽀持。
  • Spring Data Redis:是 Spring Data 项⽬中的⼀个主要模块,实现了对 Redis 客户端 API 的⾼度封装,使对 Redis 的操作更加便捷。

可以⽤以下⽅式来表达它们之间的关系:

Lettuce ➡️ Spring Data Redis ➡️ Spring Data ➡️ spring-boot-starter-data-redis

相关配置

引入依赖包

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--Lettuce 需要使⽤ commons-pool 2 创建 Redis 连接池-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>

application 配置

# Redis 数据库索引(默认为 0)
spring.redis.database=0
# Redis 服务器地址
spring.redis.host=localhost
# Redis 服务器连接端⼝
spring.redis.port=6379
# Redis 服务器连接密码(默认为空)
spring.redis.password=
# 连接池最⼤连接数(使⽤负值表示没有限制) 默认 8
spring.redis.lettuce.pool.max-active=8
# 连接池最⼤阻塞等待时间(使⽤负值表示没有限制) 默认 -1
spring.redis.lettuce.pool.max-wait=-1
# 连接池中的最⼤空闲连接 默认 8
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最⼩空闲连接 默认 0
spring.redis.lettuce.pool.min-idle=0

缓存配置

在这⾥可以为 Redis 设置⼀些全局配置,⽐如配置主键的⽣产策略 KeyGenerator,如不配置会默认使⽤参数名作为主键。

@Configuration
@EnableCaching
//@EnableCaching 来开启缓存
public class RedisConfig extends CachingConfigurerSupport {

@Override
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {

StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}
}

测试使用

@SpringBootTest
public class TestRedisTemplate {

@Autowired
private RedisTemplate redisTemplate;

@Test
public void testString() {
redisTemplate.opsForValue().set("name", "renyapeng");
}
}