私はララヴェルと仕事を始めました。働くのはとても面白いです。 laravelの機能を使い始めました。システムにredisサーバーをインストールしてredis
を使い始め、app/config/database.php
ファイルでredisの構成を変更しました。 redisは、set
を使用して、単一の変数に対して正常に機能しています。つまり、
$redis = Redis::connection();
$redis->set('name', 'Test');
とを使用して値を取得することができた
$redis->get('name');
しかし、set
関数を使用して配列を設定したいと思います。私がしようとすると、次のエラーが発生します
strlen() expects parameter 1 to be string, array given
以下のコードで試してみました。
$redis->set('name', array(5, 10));
$values = $redis->lrange('names', array(5, 10));
そして私が使うなら
$values = $redis->command('lrange', array(5, 10));
次のエラーが発生します
'command' is not a registered Redis command
誰かが私に問題を説明できますか?それはredisで可能ですか?...redis
を使用して配列値を設定できますか?
これはコメントで回答されていますが、将来訪れる人々のために回答をより明確にするためです。
Redisは言語に依存しないため、PHPまたは他の言語に固有のデータ型を認識しません。最も簡単な方法は、データをserialise
/json_encode
設定したらunserialise
/json_decode
を取得します。
json_encode
を使用してデータを保存する例:
use Illuminate\Support\Facades\Redis;
$redis = Redis::connection();
$redis->set('user_details', json_encode([
'first_name' => 'Alex',
'last_name' => 'Richards'
])
);
json_decode
を使用してデータを取得する例:
use Illuminate\Support\Facades\Redis;
$redis = Redis::connection();
$response = $redis->get('user_details');
$response = json_decode($response);
Redisは、ハッシュ、リンクリスト、配列などの複数のデータ構造タイプをサポートしています。
しかし、次のようなLaravael Redis Facadeの適切なメソッドを使用する必要があります。
//set user_details key and below key_values
Redis::hmset('user_details',["firstName" => "Abi", "lastName" => "logos"]);
//get all as an Associate Array
Redis::hgetall('user_details');
//get just The Keys as an Array
Redis::hkeys('user_details');
あなたのコントローラーでは、そのような機能を追加することができます:
use Illuminate\Support\Facades\Redis;
private function getUsers() {
if ($users = Redis::get('users.all')) {
return json_decode($users);
}
$users = User::all();
Redis::set('users.all', $users);
return $users;
}
次に、index
メソッド(またはその他)でこれを行うことができます。
public function index(Request $request) {
$users = $this->getUsers();
}
出典:受け入れられた回答および this 。