web-dev-qa-db-ja.com

RailsアプリでハッシュをRedisに保存する

Imは、RailsのRedisで始まるので、これはおそらくばかげた質問です。

私はハッシュをredisサーバーに保存しようとしていますが、それを取得すると、それは単なるストリングIEです。

hash = {"field" => "value", "field2" => "value2"}
$redis.set('data', hash)

#So collecting the data
@data = $redis.get('data')

文字列として返されるため、これは明らかに間違っています。

また、いくつかの結果をループしてhset ieを使用してみました。

@data.each do |d|
  $redis.hset('data', d.field, d.value)
end

# errror
# ERR Operation against a key holding the wrong kind of value

どこに行くかわからない。キー$ redis.del( 'data')を削除して、問題がないことを確認しました。

あなたがアドバイスできることを願っています、リー

28
Lee

Redisのドキュメントをもっとよく読んでいるべきだった。

回答:

IN
$redis.set 'data', hash.to_json

OUT
data = JSON.parse($redis.get("data"))
55
Lee

Redis gemは次のようにハッシュを再マッピングします。

$redis.mapped_hmset "test", { foo: "bar" }
$redis.hgetall "test" => {"foo"=>"bar"}
47
Matt Sonic

ハッシュをredisに保存するため。キーを最初のパラメーターとして渡し、次のパラメーターはhmsetメソッドのキーと値でなければなりません。

$redis.hmset('user:007', :name, 'Antonio', :busy, 'maybe', :ping, 'pong')

ハッピーコーディング。

10
joanzare

$redis.set('data', hash)を使用すると、ハッシュ変数を使用していても、実際には通常のRedis文字列を保存します(Json文字列にシリアル化される可能性がありますが、実際にはわかりません)。

$redis.hset('data', hash)を使用してみてください(以前のようにフィールドをループするのではありません)。

別のポイント:以前のキーを完全に削除しましたか?以前の文字列キーがまだ「そこにある」オプションを排除するために、完全に異なるキーをhsetしようとしましたか?

0
Ofer Zelig