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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Redis

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

キャッシュ

キャッシュはドキュメントやデータを一時的に保管するもので、アクセス処理時間を短くするために使用されます。

Q&A

解決済

1回答

4301閲覧

LaravelにおいてCache::rememberで保存されたキャッシュをCache::getで取得できない

findy

総合スコア41

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Redis

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

キャッシュ

キャッシュはドキュメントやデータを一時的に保管するもので、アクセス処理時間を短くするために使用されます。

0グッド

0クリップ

投稿2020/10/09 11:02

Laravel8を用いて開発を進めております。
そこで、Cache::rememberで保存したキャッシュをCache::getで呼び出すことが出来ないという問題に直面しております。

以下のような形で、Cache::rememberを利用し、DBから取得したデータをキャッシュしています。
Cacheドライバはredisです。

$value = Cache::remember('users', 120, function () { return DB::table('users')->get(); });

この時、私の認識としては、キャッシュのキーはusersです。

そして、別のコントローラで、

$value = Cache::get('users');

このようにすれば、キーがusersのキャッシュを取得できる、と考えていたのですが、取得できません。

下記も試してみるのですが、falseとなってしまいます。

if (Cache::has('users')) { // }

ここでの、Cache::rememberで設定されるキーは、usersではない、ということなのでしょうか?
直接呼び出すことができれば、ある条件でforgetなどをしたいと思いまして、
この問題を解決のために色々と調べているのですが、答えが見つけられずにおります。

redisに直接アクセスして保存されているキーを調べたいのですが、elasticacheでの確認が現状できずにおります。

ご助言いただけますと大変ありがたいです。よろしくお願いします。

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

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

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

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

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

firegrape

2020/10/09 11:18

DB::table('users')->get(); の結果がnullの場合は、nullがキャッシュされますが 上記は値が取れているのですよね?
firegrape

2020/10/09 11:19

もう一つやれることは \DB::connection('hoge')->table('hoge')->remember(120, 'cacheKey')->get(); こっちで書いてみることです。
findy

2020/10/09 12:16

ありがとうございます。はい、値が取れています。 元はと言えば、データ更新時にキャッシュを削除するためにCache::forgetをしたいと思ったのですが、なぜか削除されないため、Cache::getをしてみたら値が取れない事に気づいたという経緯がありました。 \DB::connection('hoge')->table('hoge')->remember(120, 'cacheKey')->get(); こちら、後ほど試してみます。
guest

回答1

0

自己解決

申し訳ありません、自己解決しました。
実際のコードを確認しましたところ、以下のようにtagsを設定していることに気づきました。

$value = Cache::tags('test')->remember('users', 120, function () { return DB::table('users')->get(); });

この tags('test') の部分を削除しましたところ、無事にgetできました。
同時に、

Cache::tags('test')->get('users');

としたら正しくgetできました。

tagsをつけてcacheした場合は、getする際もforgetする際も、同じtagsをつけなくてはならなかったのですね。
勉強不足でした。
お騒がせしました。

投稿2020/10/09 12:42

編集2020/10/09 12:52
findy

総合スコア41

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問