支持类
org.springframework.data.redis.support 包提供了各种可重用组件,它们都依赖 Redis 作为后端存储。目前,该包在 Redis 之上包含了各种基于 JDK 的接口实现,例如原子计数器和 JDK 集合。
RedisList 与 Java 21 SequencedCollection 向前兼容。 |
原子计数器使得包装 Redis 键增量操作变得容易,而集合则允许轻松管理 Redis 键,同时最大限度地减少存储暴露或 API 泄露。特别是,RedisSet 和 RedisZSet 接口提供了对 Redis 支持的集合操作(如 intersection 和 union)的轻松访问。RedisList 在 Redis 之上实现了 List、Queue 和 Deque 契约(以及它们的等效阻塞兄弟),以最少的配置将存储暴露为 FIFO(先进先出)、LIFO(后进先出)或有上限的集合。以下示例显示了使用 RedisList 的 bean 的配置
-
Java
-
XML
@Configuration
class MyConfig {
// …
@Bean
RedisList<String> stringRedisTemplate(RedisTemplate<String, String> redisTemplate) {
return new DefaultRedisList<>(template, "queue-key");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="queue" class="org.springframework.data.redis.support.collections.DefaultRedisList">
<constructor-arg ref="redisTemplate"/>
<constructor-arg value="queue-key"/>
</bean>
</beans>
以下示例展示了 Deque 的 Java 配置示例
public class AnotherExample {
// injected
private Deque<String> queue;
public void addTag(String tag) {
queue.push(tag);
}
}
如前面的示例所示,消费代码与实际的存储实现解耦。事实上,没有任何迹象表明底层使用了 Redis。这使得从开发环境到生产环境的迁移变得透明,并大大提高了可测试性(Redis 实现可以用内存实现替换)。