|
此版本仍在开发中,尚未被视为稳定版本。如需使用最新稳定版本,请访问 Spring Data Redis 4.0.4! |
Redis 特定的查询方法
查询方法允许根据方法名称自动派生出简单的查找查询,如下例所示:
public interface PersonRepository extends CrudRepository<Person, String> {
List<Person> findByFirstname(String firstname);
}
| 请确保在查找方法中使用的属性已设置为可被索引。 |
| Redis 仓库的查询方法仅支持对实体及带分页的实体集合进行查询。 |
使用派生查询方法可能并不总能满足建模查询的需求。RedisCallback 提供了对索引结构的实际匹配甚至自定义索引的更多控制。
为此,请提供一个 RedisCallback,该回调返回单个或 Iterable 类型的 id 值集合,如下例所示:
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 支持的关键字,以及包含该关键字的方法本质上所对应的含义:
| 关键字 | 示例 | Redis 代码片段 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
对查询方法结果进行排序
Redis 仓库支持多种方式来定义排序顺序。
Redis 本身在检索哈希(hashes)或集合(sets)时并不支持动态排序。
因此,Redis 仓库的查询方法会构建一个 Comparator,在将结果以 List 形式返回之前,先对结果应用该比较器。
让我们看一下以下示例:
interface PersonRepository extends RedisRepository<Person, String> {
List<Person> findByFirstnameOrderByAgeDesc(String firstname); (1)
List<Person> findByFirstname(String firstname, Sort sort); (2)
}
| 1 | 从方法名派生的静态排序。 |
| 2 | 使用方法参数进行动态排序。 |