SpringBoot整合Redis

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连接来完成各种操作,当然也可以按需增加连接实例。

    原文作者:橡_皮泥
    原文地址: https://www.jianshu.com/p/01a8d0383a2f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞