Redis 固有のクエリメソッド
次の例に示すように、クエリメソッドを使用すると、メソッド名から単純なファインダークエリを自動的に導出できます。
public interface PersonRepository extends CrudRepository<Person, String> {
List<Person> findByFirstname(String firstname);
}
ファインダーメソッドで使用されるプロパティがインデックス作成用に設定されていることを確認してください。 |
Redis リポジトリのクエリメソッドは、ページングを使用したエンティティおよびエンティティのコレクションのクエリのみをサポートします。 |
派生クエリメソッドを使用しても、実行するクエリをモデル化するのに必ずしも十分ではない場合があります。RedisCallback
は、インデックス構造またはカスタムインデックスの実際のマッチングをより細かく制御できます。これを行うには、次の例に示すように、id
値の単一または Iterable
セットを返す 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 リポジトリクエリメソッドは、結果を List
として返す前に、結果に適用される Comparator
を構築します。次の例を見てみましょう。
interface PersonRepository extends RedisRepository<Person, String> {
List<Person> findByFirstnameOrderByAgeDesc(String firstname); (1)
List<Person> findByFirstname(String firstname, Sort sort); (2)
}
1 | メソッド名から派生した静的ソート。 |
2 | メソッド引数を使用した動的ソート。 |