特定于 Redis 的查询方法

Query methods 允许从方法名称自动派生简单的 finder 查询,如以下示例所示:spring-doc.cn

示例 1.示例存储库查找方法
public interface PersonRepository extends CrudRepository<Person, String> {

  List<Person> findByFirstname(String firstname);
}
请确保为 finder 方法中使用的属性设置为索引。
Redis 存储库的查询方法仅支持对实体和具有分页的实体集合的查询。

使用派生的查询方法可能并不总是足以对要运行的查询进行建模。 提供对索引结构甚至自定义索引的实际匹配的更多控制。 为此,请提供返回单个或一组值的 a,如以下示例所示:RedisCallbackRedisCallbackIterableidspring-doc.cn

示例 2.使用 RedisCallback 的示例查找器
String user = //...

List<RedisSession> sessionsByUser = template.find(new RedisCallback<Set<byte[]>>() {

  public Set<byte[]> doInRedis(RedisConnection connection) throws DataAccessException {
    return connection
      .sMembers("sessions:securityContext.authentication.principal.username:" + user);
  }}, RedisSession.class);

下表概述了 Redis 支持的关键字,以及包含该关键字的方法实质上转换为的内容:spring-doc.cn

表 1.方法名称内支持的关键字
关键词 样本 Redis 代码段

Andspring-doc.cn

findByLastnameAndFirstnamespring-doc.cn

SINTER …:firstname:rand …:lastname:al’thorspring-doc.cn

Orspring-doc.cn

findByLastnameOrFirstnamespring-doc.cn

SUNION …:firstname:rand …:lastname:al’thorspring-doc.cn

Is, Equalsspring-doc.cn

findByFirstname, ,findByFirstnameIsfindByFirstnameEqualsspring-doc.cn

SINTER …:firstname:randspring-doc.cn

IsTruespring-doc.cn

FindByAliveIsTruespring-doc.cn

SINTER …:alive:1spring-doc.cn

IsFalsespring-doc.cn

findByAliveIsFalsespring-doc.cn

SINTER …:alive:0spring-doc.cn

Top,Firstspring-doc.cn

findFirst10ByFirstname,findTop5ByFirstnamespring-doc.cn

对 Query Method 结果进行排序

Redis 存储库允许使用各种方法来定义排序顺序。 Redis 本身在检索哈希或集时不支持动态排序。 因此,Redis 存储库查询方法会构造一个,该请求在将结果返回之前应用于结果。 让我们看一下以下示例:ComparatorListspring-doc.cn

例 3.对查询结果进行排序
interface PersonRepository extends RedisRepository<Person, String> {

  List<Person> findByFirstnameOrderByAgeDesc(String firstname); (1)

  List<Person> findByFirstname(String firstname, Sort sort);   (2)
}
1 从方法 name 派生的静态排序。
2 使用 method 参数的动态排序。