Redis 特定的查询方法
查询方法允许从方法名称自动推导出简单的查找器查询,如下例所示:
示例 1. 示例仓库查找器方法
public interface PersonRepository extends CrudRepository<Person, String> {
List<Person> findByFirstname(String firstname);
}
备注
请确保在 finder 方法中使用的属性已设置为索引。
备注
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 支持的关键字概览,以及包含该关键字的方法本质上翻译为什么:
表 1. 方法名中支持的关键字
关键字 | 示例 | Redis 代码片段 |
---|---|---|
And | findByLastnameAndFirstname | SINTER …:firstname:rand …:lastname:al’thor |
Or | findByLastnameOrFirstname | SUNION …:firstname:rand …:lastname:al’thor |
Is, Equals | findByFirstname , findByFirstnameIs , findByFirstnameEquals | SINTER …:firstname:rand |
IsTrue | FindByAliveIsTrue | SINTER …:alive:1 |
IsFalse | findByAliveIsFalse | SINTER …:alive:0 |
Top,First | findFirst10ByFirstname ,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
}
从方法名称派生的静态排序。
使用方法参数的动态排序。