目录
目标
讲述spring与redis集成的设计思想、使用、特性验证。
设计思想
对连接进行底层抽象,对操作进行高层抽象,客户端连接与操作彻底解耦,切换而互不影响。
这种设计思路,与大家考虑扩展性方案时的思考具有相同点,即实现扩展性的共同点:抽象,面向接口编程,使用接口承载扩展。
目前spring对Jedis和Lettuce提供融合实现。
具体代码见spring-data-redis包,我认为可以使用下图简述设计思路。
重要类
RedisConnection 提供与redis通信的核心组件,负责与redis服务器的通信。自动将底层连接包的异常转化为SpringDAO异常,所以底层连接可随意切换,不会影响操作。
RedisConnectionFactory 用于创建RedisConnection。
使用
使用springboot进行集成,也就是依赖autoconfig特性,仅需要添加依赖和配置属性即可。
需要maven依赖
<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>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
需要的配置,仅列举pool配置。
#redis配置
spring:
redis:
host: xxxx
port: 6379
database: 0
password: xxx
timeout: 2000ms
lettuce:
pool:
max-idle: 10
min-idle: 1
max-active: 200
max-wait: 2000ms
#redis配置
spring:
redis:
host: xxxx
port: 6379
database: 0
password: xxx
timeout: 2000ms
jedis:
pool:
max-idle: 10
min-idle: 1
max-active: 200
max-wait: 2000ms
具体配置项可参考
org.springframework.boot.autoconfigure.data.redis.RedisProperties
org.springframework.data.redis.connection.RedisSentinelConfiguration
org.springframework.data.redis.connection.RedisClusterConfiguration
代码中直接引入xxxTemplate,例如
@Resource
RedisTemplate redisTemplate;
lettuce共享连接与独占连接特性
默认情况,Lettuce 对 所有非阻塞和非事务型操作 共享 同一个线程安全的本地连接。可配置LettucePool,为阻塞和事务操作,提供独占连接。
避免内容冗长,请见下篇随笔,验证lettuce共享和独占连接特性。