リストを含む JSON オブジェクトから redis レコードが設定された場合、後でそのリストを更新するために LPUSH コマンドを使用できますか? (node.jsでredisを使用)ありがとう
質問する
2355 次
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 に答える