跳到主要内容

Redis 特定的查询方法

DeepSeek V3 中英对照 Redis-specific Query Methods

查询方法允许从方法名称自动推导出简单的查找器查询,如下例所示:

示例 1. 示例仓库查找器方法

public interface PersonRepository extends CrudRepository<Person, String> {

List<Person> findByFirstname(String firstname);
}
java
备注

请确保在 finder 方法中使用的属性已设置为索引。

备注

Redis 仓库的查询方法仅支持对实体和实体集合的分页查询。

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

示例 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);
java

下表提供了 Redis 支持的关键字概览,以及包含该关键字的方法本质上翻译为什么:

表 1. 方法名中支持的关键字

关键字示例Redis 代码片段
AndfindByLastnameAndFirstnameSINTER …:firstname:rand …:lastname:al’thor
OrfindByLastnameOrFirstnameSUNION …:firstname:rand …:lastname:al’thor
Is, EqualsfindByFirstname, findByFirstnameIs, findByFirstnameEqualsSINTER …:firstname:rand
IsTrueFindByAliveIsTrueSINTER …:alive:1
IsFalsefindByAliveIsFalseSINTER …:alive:0
Top,FirstfindFirst10ByFirstname,findTop5ByFirstname

排序查询方法结果

Redis 存储库允许使用多种方法来定义排序顺序。Redis 本身在检索哈希或集合时不支持实时排序。因此,Redis 存储库查询方法会构建一个 Comparator,在将结果作为 List 返回之前应用于结果。让我们看一下以下示例:

示例 3. 查询结果排序

interface PersonRepository extends RedisRepository<Person, String> {

List<Person> findByFirstnameOrderByAgeDesc(String firstname); 1

List<Person> findByFirstname(String firstname, Sort sort); 2
}
java
  • 从方法名称派生的静态排序。

  • 使用方法参数的动态排序。