Spring-данные и Redis: сортировка результатов - PullRequest
0 голосов
/ 12 февраля 2019

Из загрузочного приложения Spring я хочу использовать Redis и получать выгруженные и отсортированные результаты.

Конфигурация Maven:

<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-redis</artifactId>
  <version>2.1.4.RELEASE</version>
</dependency>

<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>2.10.2</version>
  <type>jar</type>
</dependency>

На основе онлайн-примера я реализовал следующий репозиторий:

@Repository
public interface StudentRepository extends PagingAndSortingRepository<Student, String> {

  List<Student> findByName(String Name, Pageable page);
  List<Student> findByName(String Name);

}

Теперь я хочу отфильтровать студента, используя

studentRepository.findAll(Sort.by("range").ascending());

Со студентом:

@RedisHash("Student")
public class Student implements Serializable {
  @Id
  private String id;
  @Indexed
  private String name;
  private Gender gender;
  private int grade;

Независимо от видапорядок всегда одинаков.После сеанса отладки я понял, что причина в следующем:

class RedisQueryEngine extends QueryEngine<RedisKeyValueAdapter, RedisOperationChain, Comparator<?>> {

/**
 * Creates new {@link RedisQueryEngine} with defaults.
 */
RedisQueryEngine() {
    this(new RedisCriteriaAccessor(), null);
}

/**
 * Creates new {@link RedisQueryEngine}.
 *
 * @param criteriaAccessor
 * @param sortAccessor
 * @see QueryEngine#QueryEngine(CriteriaAccessor, SortAccessor)
 */
private RedisQueryEngine(CriteriaAccessor<RedisOperationChain> criteriaAccessor,
        @Nullable SortAccessor<Comparator<?>> sortAccessor) {
    super(criteriaAccessor, sortAccessor);
}

Открытый конструктор, вызываемый Spring, не определил sortAccessor.Этот метод доступа сортировки затем используется в классе QueryEngine моим запросом:

public <T> Collection<T> execute(KeyValueQuery<?> query, String keyspace, Class<T> type) {

    CRITERIA criteria = this.criteriaAccessor.map(it -> it.resolve(query)).orElse(null);
    SORT sort = this.sortAccessor.map(it -> it.resolve(query)).orElse(null);

    return execute(criteria, sort, query.getOffset(), query.getRows(), keyspace, type);
}

Ожидается ли такое поведение?Может ли Redis только страница результатов (это работает, я проверял это), но не сортировать их (в этом случае, подкачки совершенно бесполезно)?

...