2011-10-28 11 views
5

私はHerokuのアプリケーションで店舗の認証されたユーザーにRedisを使用するように言われました。私は何をしたい、このようなRedisのストア内のユーザーのストアハッシュです:redisキー/値内で複数の値を検索する

{ 
    id:4532143215432, 
    username:'davejlong', 
    email:'[email protected]' 
} 

そして私は、ユーザー名またはIDのいずれかで検索できるようにしたいです。これは何とかレディスで可能ですか?私はどんなRedisのをサポートしているのNode.jsのRedisのモジュールを使用しています

https://github.com/mranney/node_redis

答えて

2

@orangeoctopus usecaeにはほとんど問題がありません。

Redisの127.0.0.1:6379> HMSET番号:4532143215432名davejlong​​ [email protected]​​.com Redisの127.0.0.1:6379> HMSETユーザOK:davejlong​​ ID 4532143215432メール[email protected]​​.com OK

これで複製が行われ、新しい値を追加して&の更新を削除すると考えられます。

だから私は、ユーザー名

redis.get('user:davejlong',function(err,id){ 
    console.log('User Id of @davejlong: ' + id); 
    redis.hgetall('user:'+id,function(err,user){ 
     console.log('User Data: ' + user); 
    }) 
    }) 

2の場合には、この

SET user:davejlong 1 
HMSET user:1 username davejlong email [email protected] 

1)を好む)は同上

redis.hgetall('user:1',function(err,user){ 
     console.log('User Data: ' + user); 
    }) 
+0

私はこれを "もっとコンパクトな方法で..."と逃しましたが、それを打ち込むのは怠惰でした。 +1 –

+0

@philpirozhkovどちらか1つ... –

+0

申し訳ありません私はあなたがメールで見つける能力を追加していないので、ポイントを逃した。 'SET user:[email protected]​​.com 1' あなたはメールで見つけることができます –

3

を命じるそれは二回、各ユーザーの保存と同じくらい簡単です。 idのキーで1回、usernameのキーで1回。

メモリの面でこれを行うよりコンパクトな方法は、ユーザー名のIDをキーにすることです。そのため、ユーザー名クエリは次のようになります。 idを入れて、情報を入手してください。

残念ながら、同じ実際のデータに2つの異なるキーをキー入力する良い方法はありません。新しいユーザを挿入し、それを照会しますたとえば


、:私は、ユーザーを作成していたとき、私は二回HMSETを使用

redis 127.0.0.1:6379> HMSET id:4532143215432 username davejlong email [email protected] 
OK 
redis 127.0.0.1:6379> HMSET user:davejlong id 4532143215432 email [email protected] 
OK 
redis 127.0.0.1:6379> HGET id:4532143215432 username 
"davejlong" 
redis 127.0.0.1:6379> HGET user:davejlong id 
"4532143215432" 
redis 127.0.0.1:6379> HMGET user:davejlong email id 
1) "[email protected]" 
2) "4532143215432" 
redis 127.0.0.1:6379> DEL user:davejlong 
(integer) 1 
redis 127.0.0.1:6379> DEL id:4532143215432 
(integer) 1 

ていることに注意してください。さて、私はユーザー名かIDのどちらかに対して照会することができます。私は今、両方のキーを削除する必要があります。

+0

の場合では、私はそれを行うだろうか私を示すことができましたCLI?私はすべてのこのredisものの新品ですので、私はハッシュ、リストなどを使用するかどうか不明です –

+0

私の答えは例で更新されています。 –

+0

ここに重複データを作成しています。使用インデックスを考えてみましょう。 –

関連する問題