使用 Redis 和 Spring 时的首要任务之一是通过 IoC 容器连接到 Redis。因此,我们需要一个 Java 连接器。无论您选择哪种库(Lettuce 或者 Jedis),您只需要使用一组 Spring Data Redis API,这些 API 在所有连接器中的行为均一致。
org.springframework.data.redis.connection 包及其 RedisConnection 和 RedisConnectionFactory 接口,用于处理和检索到 Redis 的活动连接。
RedisConnection 为 Redis 通信提供了核心构建块,因为它处理与 Redis 后端的通信。它还自动将底层连接库异常转换为 Spring 一致的 DAO 异常层次结构,以便您可以在不更改任何代码的情况下切换连接器,因为操作语义保持不变。
注意:对于需要原生库 API 的极端情况,RedisConnection 提供了一个专用方法 (getNativeConnection),该方法返回用于通信的原始底层对象。
活动的 RedisConnection 对象是通过 RedisConnectionFactory 创建的。此外,工厂充当PersistenceExceptionTranslator对象,这意味着一旦声明,它们就允许您进行透明的异常转换。例如,您可以通过使用@Repository注释和AOP进行异常转换。
注意:当使用连接池或共享本机连接时,根据底层配置,工厂可以返回新连接或现有连接。
使用 RedisConnectionFactory 最简单的方法是通过 IoC 容器配置适当的连接器,并将其注入到业务类中。
不幸的是,目前,并非所有连接器都支持所有 Redis 功能。在底层库不支持的 Connection API 上调用方法时,会引发 UnsupportedOperationException。以下概述了各个 Redis 连接器支持的功能:
支持的功能 | Lettuce | Jedis |
---|---|---|
独立连接 | X | X |
主/副本连接 | X | |
Redis 哨兵 | Master Lookup, Sentinel Authentication, Replica Reads | Master Lookup |
Redis 集群 | Cluster Connections, Cluster Node Connections, Replica Reads | Cluster Connections, Cluster Node Connections |
传输通道 | TCP, OS-native TCP (epoll, kqueue), Unix Domain Sockets | TCP |
连接池 | X (使用 commons-pool2) | X (使用 commons-pool2) |
其他连接功能 | 非阻塞命令的单例连接共享 | JedisShardInfo 支持 |
SSL 支持 | X | X |
发布/ | X | X |
管道 | X | X |
事务 | X | X |
数据类型支持 | Key, String, List, Set, Sorted Set, Hash, Server, Stream, Scripting, Geo, HyperLogLog | Key, String, List, Set, Sorted Set, Hash, Server, Scripting, Geo, HyperLogLog |
响应式(非阻塞)API | X |