3

リストを含む JSON オブジェクトから redis レコードが設定された場合、後でそのリストを更新するために LPUSH コマンドを使用できますか? (node.jsでredisを使用)ありがとう

4

1 に答える 1

8

いいえ。Redis はフォーマットに依存しません。JSON を解析できず、ドキュメント指向のデータベースではありません。

LPUSH は Redis リスト オブジェクトにのみ適用されます。

ただし、Lua Redis 2.6 サーバー側スクリプト機能を使用して実行できるのは、JSON オブジェクトをデコードし、アイテムを追加し、オブジェクトをエンコードして保存するスクリプトです。

たとえば、次の JSON オブジェクトを使用します。

set users:1 "{\"id\":1,\"name\":\"Rocco\",\"age\":50,girlfriends:[\"Ulla\"]}"

新しいガールフレンドの追加は、 eval コマンドを使用して 1 回の操作で実装できます。

eval "local t = cjson.decode( redis.call('get',KEYS[1] ))
  if t.girlfriends then
     table.insert(t.girlfriends,ARGV[1])
  else
     t.girlfriends = {ARGV[1]}
  end
  return redis.call('set',KEYS[1], cjson.encode(t))
" 1 user:1 Augusta

もう 1 つの可能性は、JSON オブジェクトを Redis に直接保存することを避けることですが、JSON オブジェクトを複数の Redis キーに変換するレイヤーを作成することです (特定のキーでリスト セクションを分離します)。

例えば:

 { "id":1, "name": "Rocco", "age":50,
  girlfriends: [ "Ulla", "Bella", "Josepha", "Isabella" ] }

次のように保存できます。

 HMSET users:1:info name Rocco age 50
 RPUSH users:1:girlfriends Ulla Bella Josepha Isabella

このアプローチの主な利点は、パフォーマンスと部分的な更新のサポートです。主な欠点は、ある程度の柔軟性が失われ、変換コードを書くのが面倒になる可能性があることです。

于 2012-05-01T11:56:58.150 に答える