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"
必要に応じて、キーのJSONサブオブジェクトを編集するためにLuaでさらに高度なものを作成することもできます。
ロックの使用方法の例については、RedisSETNXコマンドのドキュメントをご覧ください。