web-dev-qa-db-ja.com

Redisを使用してデータの配列を格納する(Laravelから)

私はララヴェルと仕事を始めました。働くのはとても面白いです。 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を使用して配列値を設定できますか?

22
Kalai

これはコメントで回答されていますが、将来訪れる人々のために回答をより明確にするためです。

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);
48
ajtrichards

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');

詳細情報: https://redis.io/commands#hash

1
Abilogos

あなたのコントローラーでは、そのような機能を追加することができます:

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

0
Seif