【Spring连载】使用Spring Data访问Redis(二)----关于连接工厂
- 一、Drivers
- 二、RedisConnection和RedisConnectionFactory
- 三、配置 Lettuce 连接器
- 四、配置 Jedis 连接器
一、Drivers
使用Redis和Spring的首要任务之一是通过IoC容器连接到存储。为此,需要一个Java连接器(或绑定)。无论你选择哪个库,你只需要使用一组Spring Data Redis api(它在所有连接器上的行为一致)。org.springframework.data.redis.connection包及其RedisConnection和RedisConnectionFactory接口,用于与Redis一同工作,并检索到Redis的active连接。
二、RedisConnection和RedisConnectionFactory
RedisConnection为Redis通信提供了核心模块。它还自动将底层连接库异常转换为与Spring一致的DAO异常层次结构,这样你就可以在不更改任何代码的情况下切换连接器,因为操作语义保持不变。
对于需要native library API的情况,RedisConnection提供了一个专用方法(getNativeConnection),该方法返回用于通信的原始底层对象。
Active RedisConnection对象是通过RedisConnectionFactory创建的。此外,工厂充当PersistenceExceptionTranslator对象,这意味着一旦声明,它们就可以进行透明的异常转换。例如,您可以通过使用@Repository注解和AOP来进行异常转换。有关更多信息,请参阅Spring Framework文档中的专门描述。
RedisConnection类不是线程安全的。虽然底层的本机连接,如Lettuce的StatefulRedisConnection,可能是线程安全的,但Spring Data Redis的LettuceConnection类本身不是。因此,不应在多个线程之间共享RedisConnection的实例。对于事务性或阻塞Redis操作和命令(如BLPOP)尤其如此。例如,在事务和管道操作中,RedisConnection保持不受保护的可变状态以正确完成操作,从而使与多个线程一起使用变得不安全。这是经过设计的。
如果出于性能或其他原因,需要在多个线程之间共享(有状态)Redis资源,如连接,则应获取本地连接并直接使用Redis客户端库(驱动程序)API。或者,您可以使用RedisTemplate,它以线程安全的方式获取和管理操作(和Redis命令)的连接。有关更多详细信息,请参阅RedisTemplate文档。
根据底层配置,工厂可以返回新连接或现有连接(当使用池或共享本机连接时)。
使用RedisConnectionFactory最简单的方法是通过IoC容器配置适当的连接器,并将其注入using类。
不幸的是,目前并不是所有的连接器都支持Redis的所有功能。在基础库不支持的Connection API上调用方法时,将引发UnsupportedOperationException。以下概述解释了各个Redis连接器支持的功能: