Lua скриптове или модел на заключване биха решили проблема ви.
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 за пример как да използвате заключване.