2016-08-04 10 views
1

私はredisで新しいです、私の質問が間違っている可能性があります。redisでmysqlの表形式のデータを保存

私はユーザーデータを赤字で保存します。

例えばデータがあるしましょう -

first_name   last_name     email 
    abc     xyz      [email protected] 
    def     hig      [email protected] 

私のコードがある -

私はコマンド

を使用して、ユーザーのデータを見ると、我々はポスト配列

 require "predis/autoload.php"; 
     Predis\Autoloader::register(); 

     $redis = new Predis\Client(array(
     "scheme" => "tcp", 
     "host" => "127.0.0.1", 
     "port" => 6379)); 

     $redis->incr("id"); 
     $user_id = $redis->get("id"); 


     $redis->hset("users", 'id', $user_id); 
     foreach($_POST as $key => $post_values){ 
      $redis->hset("users", $key, $post_values); 

     } 

でデータを取得しているましょう

$users = $redis->hgetall("users"); 

2番目のユーザーが最初のユーザーと重複しています。 私はIDがユーザーデータを正しくマッピングしていないと思います。

お勧めします。

+0

あなたはhmsetがで一意のキーを使用してハッシュキーを作成します1包括的なキー – JammyDodger231

+0

にリンクされている複数のフィールドを使用することができるので、hmsetとhmgetを使用してだけではなく、単数HSETほうがよいのではないだろうことができますあなたのテーブル(例:あなたの場合の電子メール)。それに対応するredisにデータを格納します。 –

+0

ありがとう、私は試しています。 – Rich5757

答えて

0

私はhmset使用してだけではなく、HSETのでhmsetを使用することをお勧めします、私はユーザーIDであること、配列の名前を使用していると思うの最も簡単な方法は:

HMSET user1 email "[email protected]" username "MyUser" 

は、その後、あなたは使用することができ

HMGET user1 email 
私は以下の https://github.com/henderjon/redisを使用するPHP用のユーザ1

のための電子メールを取得するために

はあなたがPHPでこれらの同じコマンドを設定するためにこれを使用する方法である

$redis = (new \Redis\RedisProtocol())->connect('127.0.0.1', '6379'); 
$redis->hmset("user1", ["email", "[email protected]", "username", "MyUser"]); 

次に取り出すには、次のようになります。

($redis->hmget("user1", ['email']))[0] 
+1

ありがとう、私はそれをテストしています。 – Rich5757

+0

これで問題は解決しましたか? – JammyDodger231

0

各ユーザーはハッシュ自体であるのに対し、ここでの問題は、すべてのユーザーのためのデータを格納するための「ユーザー」を使用している非常に単純です。だから、 "users"という文字列でIDを付け加えればいいですね。

$redis->hset("users", 'id', $user_id); 
Change it like $redis->hset("users:"+$user_id, 'id', $user_id); 
foreach($_POST as $key => $post_values){ 
     $redis->hset("users:"+$user_id, $key, $post_values); 

    } 

希望これは

関連する問題