Skrypty Lua lub wzór blokady rozwiążą Twój problem.
EVAL 'local obj = cjson.decode(redis.call("GET", "key1")); obj.prop1.subprop1 = ARGV[1]; redis.call("SET", "key1", cjson.encode(obj));' 0 "did_change"
Możesz nawet zrobić coś bardziej zaawansowanego w Lua do edycji podobiektów JSON dowolnego klucza, jeśli chcesz.
Zapoznaj się z dokumentacją polecenia Redis SETNX, aby zapoznać się z przykładem użycia blokady.