2012-05-22 3 views
4

Скажите, что у меня есть хеш, в котором может быть изменено вложенное свойство.Работа с вложенными объектами в Redis?

"key1": { 
    "prop1": { 
    "subprop1": "could_change" 
    } 
} 

Если я послал информацию, которая prop1.subprop1 изменилось я могу преформы атомных обновлений на этой собственности? Прямо сейчас node_redis сохраняет prop1 как строку, которая говорит '[object Object]'. Если IJSON.stringify() obj, тогда мне нужно будет восстановить объект, проанализировать объект в памяти, сделать редактирование, а затем выровнять и сохранить объект - не зная, что что-то изменилось в среднем.

Если я должен работать с этими данными по-другому, кто-то может объяснить это? У меня есть объект с вложенными атрибутами, которые мне нужны, чтобы обновлять части, в дополнение к необходимости извлекать как целый объект.

Спасибо за помощь!

ответ

7

Lua scripting или pattern lock поможет решить вашу проблему.

EVAL 'local obj = cjson.decode(redis.call("GET", "key1")); obj.prop1.subprop1 = ARGV[1]; redis.call("SET", "key1", cjson.encode(obj));' 0 "did_change" 

Можно даже сделать что-то более продвинутое в Lua для редактирования любого ключа в формате JSON подобъектов, если вы хотите.

Посмотрите на пример использования замка Redis SETNX command docs.

+1

Примечание: Lua-скрипты доступны только с Redis 2.6 или выше. –

Смежные вопросы