SpringBoot对很多NoSQL数据库提供了自动化支持,包括Redis、MongoDB、Elasticsearch、Solr等
‘SpringBoot’、’Redis’
引入依赖
<!-- 版本号2.1.1.RELEASE -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
注:spring-boot-starter-data-redis的配置变更
在springboot1.4.x版本更新日志中有这么一段说明:
Renamed starters
The following starters have been renamed, the old ones will be removed in Spring Boot 1.5
spring-boot-starter-redis → spring-boot-starter-data-redis
...
即spring-boot-starter-redis从1.4.0版本开始更名为spring-boot-starter-data-redis,在1.4.7之后完全移除掉spring-boot-starter-redis。
- 当springboot版本号小于1.4.0时,只能添加spring-boot-starter-redis的jar包;
- 版本号在1.4.0到1.4.7之间时,添加spring-boot-starter-redis和spring-boot-starter-data-redis皆可,两者的包没有区别;
- 从1.5.0版本开始,只能添加spring-boot-starter-data-redis包。
配置
SpringBoot从1.x到2.x,对redis的配置有一些变更。
旧版配置
spring.redis.database=0
spring.redis.host=192.168.99.100
spring.redis.port=6379
#spring.redis.password= # Login password of the redis server.
spring.redis.pool.max-active=8
spring.redis.pool.max-idle=8
spring.redis.pool.max-wait=-1
spring.redis.pool.min-idle=0
#spring.redis.sentinel.master= # Name of Redis server.
#spring.redis.sentinel.nodes= # Comma-separated list of host:port pairs.
spring.redis.timeout=10
新版配置
如果使用jedis,将lettuce改为jedis,并引入jedis依赖即可
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=192.168.99.100
# Redis服务器连接端口
spring.redis.port=6379
#spring.redis.password= # Login password of the redis server.
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=8
# 连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.lettuce.pool.max-wait=-1ms
# 连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0
#spring.redis.sentinel.master= # Name of Redis server.
#spring.redis.sentinel.nodes= # Comma-separated list of host:port pairs.
# 连接超时时间(毫秒)
spring.redis.timeout=100ms
测试访问
@RunWith(SpringRunner.class)
@SpringBootTest
public class BootDemoApplicationTests {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
public void contextLoads() {
//保存字符串
stringRedisTemplate.opsForValue().set("key", "1234");
Assert.assertEquals("1234", stringRedisTemplate.opsForValue().get("key"));
}
}
//在早期版本中,在1.4版本之后@SpringBootTest注解替换了@SpringApplicationConfiguration注解。
在SpringBoot1.x版本中,spring-boot-starter-data-redis使用的是Jedis。SpringBoot2.x版本,默认使用的是Lettuce,也提供了对Jedis的支持。
Jedis和Lettuce
两个框架的定位都是Redis的客户端。Jedis的API提供了比较全面的Redis命令的支持,相比Lettuce更加原生。在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个Jedis实例增加物理连接; Lettuce用于线程安全同步,异步和响应使用,支持集群,管道和编码器。基于Netty框架的事件驱动的通信层,其方法调用是异步的。Lettuce的API是线程安全的,所以可以操作单个Lettuce连接来完成各种操作,当然也可以按需增加连接实例。