如需最新的稳定版本,请使用 Spring Data Redis 3.4.0! |
特定于 Redis 的查询方法
Query methods 允许从方法名称自动派生简单的 finder 查询,如以下示例所示:
示例 1.示例存储库查找方法
public interface PersonRepository extends CrudRepository<Person, String> {
List<Person> findByFirstname(String firstname);
}
请确保为 finder 方法中使用的属性设置为索引。 |
Redis 存储库的查询方法仅支持对实体和具有分页的实体集合的查询。 |
使用派生的查询方法可能并不总是足以对要运行的查询进行建模。 提供对索引结构甚至自定义索引的实际匹配的更多控制。
为此,请提供返回单个或一组值的 a,如以下示例所示:RedisCallback
RedisCallback
Iterable
id
示例 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 支持的关键字,以及包含该关键字的方法实质上转换为的内容:
关键词 | 样本 | Redis 代码段 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
对 Query Method 结果进行排序
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)
}
1 | 从方法 name 派生的静态排序。 |
2 | 使用 method 参数的动态排序。 |