对于最新的稳定版本,请使用 Spring Data Redis 3.5.3! |
特定于 Redis 的查询方法
查询方法允许从方法名称自动派生简单的查找器查询,如以下示例所示:
示例 1.示例存储库查找器方法
public interface PersonRepository extends CrudRepository<Person, String> {
List<Person> findByFirstname(String firstname);
}
请确保查找器方法中使用的属性已设置为索引。 |
Redis 存储库的查询方法仅支持对具有分页功能的实体和实体集合的查询。 |
使用派生查询方法可能并不总是足以对要运行的查询进行建模。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 代码片段 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
对查询方法结果进行排序
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 | 从方法名称派生的静态排序。 |
2 | 使用方法参数进行动态排序。 |