Support Classes

org.springframework.data.redis.support 提供各种可重用组件,这些组件依赖 Redis 作为后端存储。目前,该包包含各种基于 JDK 的接口实现(基于 Redis),例如 atomic 计数器和 JDK Collections

RedisList 向前兼容 Java 21 SequencedCollection

原子计数器可轻松封装 Redis 密钥递增,而集合则允许轻松管理 Redis 密钥,同时最大程度减少存储暴露或 API 泄漏。特别是,RedisSetRedisZSet 接口可轻松访问 Redis 支持的集合操作,例如 intersectionunionRedisList 在 Redis 之上实现了 ListQueueDeque 契约(及其同等的阻塞兄弟姐妹),将存储公开为 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 实现替换为内存内实现)。