SpringBoot整合Redis
SpringBoot对很多NoSQL数据库提供了自动化支持,包括Redis、MongoDB、Elasticsearch、Solr等
引入依赖
org.springframework.boot spring-boot-starter-data-redis 复制代码 org.springframework.boot spring-boot-starter-test test
注:spring-boot-starter-data-redis的配置变更
在springboot1.4.x版本更新日志中有这么一段说明:
Renamed startersThe following starters have been renamed, the old ones will be removed in Spring Boot 1.5spring-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=0spring.redis.host=192.168.99.100spring.redis.port=6379#spring.redis.password= # Login password of the redis server.spring.redis.pool.max-active=8spring.redis.pool.max-idle=8spring.redis.pool.max-wait=-1spring.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)@SpringBootTestpublic 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连接来完成各种操作,当然也可以按需增加连接实例。