对于最新的稳定版本,请使用 Spring Data Redis 3.5.3spring-doc.cadn.net.cn

特定于 Redis 的查询方法

查询方法允许从方法名称自动派生简单的查找器查询,如以下示例所示:spring-doc.cadn.net.cn

示例 1.示例存储库查找器方法
public interface PersonRepository extends CrudRepository<Person, String> {

  List<Person> findByFirstname(String firstname);
}
请确保查找器方法中使用的属性已设置为索引。
Redis 存储库的查询方法仅支持对具有分页功能的实体和实体集合的查询。

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

示例 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 支持的关键字,以及包含该关键字的方法基本上转换为什么:spring-doc.cadn.net.cn

表 1.方法名称中支持的关键字
关键词 样本 Redis 代码片段

Andspring-doc.cadn.net.cn

findByLastnameAndFirstnamespring-doc.cadn.net.cn

SINTER …:firstname:rand …:lastname:al’thorspring-doc.cadn.net.cn

Orspring-doc.cadn.net.cn

findByLastnameOrFirstnamespring-doc.cadn.net.cn

SUNION …:firstname:rand …:lastname:al’thorspring-doc.cadn.net.cn

Is, Equalsspring-doc.cadn.net.cn

findByFirstname,findByFirstnameIs,findByFirstnameEqualsspring-doc.cadn.net.cn

SINTER …:firstname:randspring-doc.cadn.net.cn

IsTruespring-doc.cadn.net.cn

FindByAliveIsTruespring-doc.cadn.net.cn

SINTER …:alive:1spring-doc.cadn.net.cn

IsFalsespring-doc.cadn.net.cn

findByAliveIsFalsespring-doc.cadn.net.cn

SINTER …:alive:0spring-doc.cadn.net.cn

Top,Firstspring-doc.cadn.net.cn

findFirst10ByFirstname,findTop5ByFirstnamespring-doc.cadn.net.cn

对查询方法结果进行排序

Redis 存储库允许使用各种方法来定义排序顺序。 Redis 本身在检索哈希或集时不支持进行中排序。 因此,Redis 存储库查询方法构造了一个Comparator在返回结果之前应用于结果List. 让我们看一下下面的例子:spring-doc.cadn.net.cn

示例 3.对查询结果进行排序
interface PersonRepository extends RedisRepository<Person, String> {

  List<Person> findByFirstnameOrderByAgeDesc(String firstname); (1)

  List<Person> findByFirstname(String firstname, Sort sort);   (2)
}
1 从方法名称派生的静态排序。
2 使用方法参数进行动态排序。