質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

1回答

815閲覧

redisTemplateクラスのget()やrange()やentries()のメソッドがどこで定義されているか教えてください

uk_yamayam

総合スコア11

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2022/10/09 01:55

編集2022/10/09 02:35

前提

プログラミング初心者で、javaとSpring Frameworkを学習しております。
下記記事を参考にredisに対してsample dataをpost/getできるようなサンプルアプリを構築しようとしております
https://qiita.com/yut_arrows/items/07eabf48235d04331f9e

お伺いしたいこと

記事にある、下記コードの中で@getMappingアノテーション以降に
opsForvalue().get(xxx)
opsForvalue().range(xxx)
opsForvalue().entries(xxx)
というメソッドがあるのですが、これがどのクラスに属するメソッドのなのか見つけられずお伺いしたいです。

java

1 2 3@RestController 4@RequestMapping(value = "/SampleRedis") 5public class RedisSampleController { 6 7 @Autowired 8 private StringRedisTemplate redisTemplate; 9 10 @PostMapping 11 public void post(@RequestBody RedisSampleData redisSampleData) { 12 redisTemplate.delete("redis-tutorial:string"); 13 redisTemplate.opsForValue() 14 .set("redis-tutorial:string", redisSampleData.getString()); 15 redisTemplate.delete("redis-tutorial:list"); 16 redisTemplate.opsForList() 17 .rightPushAll("redis-tutorial:list", 18 redisSampleData.getList().toArray(new String[0])); 19 redisTemplate.delete("redis-tutorial:map"); 20 redisTemplate.opsForHash() 21 .putAll("redis-tutorial:map", redisSampleData.getMap()); 22 } 23 24 @GetMapping 25 public RedisSampleData get() { 26 RedisSampleData redisSampleData = new RedisSampleData(); 27 redisSampleData.setString( 28 redisTemplate.opsForValue() 29 .get("redis-tutorial:string") 30 ); 31 redisSampleData.setList( 32 redisTemplate.opsForList() 33 .range("redis-tutorial:list", 0, -1) 34 ); 35 redisSampleData.setMap( 36 redisTemplate.<String, String>opsForHash() 37 .entries("redis-tutorial:map") 38 ); 39 return redisSampleData; 40 } 41}

理解していること(理解していると思っていること)

  • opsForvalue()メソッドはStringredisTemplateの継承元である、RedisTemplateクラスの中で定義されているメソッドで下記に記載されていることを確認しました。

RedisTemplateクラスのDoc
https://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/RedisTemplate.html#opsForValue--

  • get()やrange()やentries()のメソッドは、redisTemplateの元になっているクラスであるStringRedisTemplateクラス、或いはその親クラスで定義されているはずだと推測しております。が、StringRedisTemplateクラス配下のメソッド、及びRedisTemplateクラス、RedisAccessorクラス、java.lang.Objectクラスにおいても該当のメソッドが見つからず、どこで定義されているものなのかどこを参照すればオプションについて確認できるのか知りたいです。

StringRedisTemplateクラスのdoc
https://spring.pleiades.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/StringRedisTemplate.html

  • もしくは、opsForValue、opsForListを定義しているクラスの配下にあるかもしれないと思い、opsForValueとopsForListをクラスメソッドに持つ、RedisOperationsインターフェースを確認しましたがget, range, entriesのメソッドについては見つかりませんでした。

RedisOperationsインターフェースのdoc
https://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/RedisOperations.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

opsForvalue().get(xxx)
opsForvalue().range(xxx)
opsForvalue().entries(xxx)
というメソッドがあるのですが

コードを惰性で読んでいませんか?
redisTemplate.opsForValue().get("redis-tutorial:string")
redisTemplate.opsForList().range("redis-tutorial:list", 0, -1)
redisTemplate.<String, String>opsForHash().entries("redis-tutorial:map")

get() は opsForValue() が返すオブジェクトのメソッドですが、 range() は opsForList() 、entries() は opsForHash() が返すオブジェクトのメソッドです。

投稿2022/10/09 04:53

編集2022/10/09 04:56
jimbe

総合スコア12646

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uk_yamayam

2022/10/09 05:26

jimbe様 早速のご回答ありがとうございます。 横着してしまい、記載が謝っておりました。申し訳ございません。 redisTemplate.opsForValue().get("redis-tutorial:string") redisTemplate.opsForList().range("redis-tutorial:list", 0, -1) redisTemplate.<String, String>opsForHash().entries("redis-tutorial:map") である旨、認識ありました。 ご回答から推測するに、opsForxxx()に対して、それぞれ返される(.の後に後ろに続く)メソッドは添付頂いたdoc先で言うところの"戻り値"に相当する部分で、具体的にはget(), range(), entries()の一意に定まるもの、ということでしょうか? "リスト操作"や"ハッシュ演算"と記載あるものは、StringRedisTemplateクラス或いはその親クラスの中でメソッドとして定義されてるものではない、なぜなら一意に定まるからと解したのですが合っておりますでしょうか?
jimbe

2022/10/09 08:46 編集

メソッドの呼び出し f() の直後に .a() とあった場合は、 a() は f() の返すオブジェクトに対してのメソッドの呼び出しです。 例えば、 String f() { return "abcdef"; } というメソッドがあれば、 f().substring(1,3) で "bc" が返されます。(substring は f() の返し値の型である String のメソッドです。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問