Lua scripting eller et låsemønster ville løse dit 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"
Du kan endda lave noget mere avanceret i Lua til redigering af enhver nøgles JSON-underobjekter, hvis du ville.
Se Redis SETNX-kommandodokumenterne for et eksempel på, hvordan man bruger en lås.