{
  "SET":{
    "summary": "Sets the value of an id",
    "complexity": "O(1)",
    "arguments": [
      {
        "name": "key",
        "type": "string"
      },
      {
        "name": "id",
        "type": "string"
      },
      {
        "command": "FIELD",
        "name": ["name", "value"],
        "type": ["string", "double"],
        "optional": true,
        "multiple": true
      },
      {
        "command": "EX",
        "name": ["seconds"],
        "type": ["double"],
        "optional": true,
        "multiple": false
      },
      {
        "name": "type",
        "optional": true,
        "enumargs": [
          {
            "name": "NX"
          },
          {
            "name": "XX"
          }
		]
      },
	  {
		"name": "value",
        "enumargs": [
          {
            "name": "OBJECT",
            "arguments":[
              {
                "name": "geojson",
                "type": "geojson"
              }
            ]
          },
          {
            "name": "POINT",
            "arguments":[
              {
                "name": "lat",
                "type": "double"
              },
              {
                "name": "lon",
                "type": "double"
              },
              {
                "name": "z",
                "type": "double",
                "optional": true
              }
            ]
          },
          {
            "name": "BOUNDS",
            "arguments":[
              {
                "name": "minlat",
                "type": "double"
              },
              {
                "name": "minlon",
                "type": "double"
              },
              {
                "name": "maxlat",
                "type": "double"
              },
              {
                "name": "maxlon",
                "type": "double"
              }
            ]
          },
          {
            "name": "HASH",
            "arguments":[
              {
                "name": "geohash",
                "type": "geohash"
              }
            ]
          },
          {
            "name": "STRING",
            "arguments":[
              {
                "name": "value",
                "type": "string"
              }
            ]
          }
        ]
      }
    ],
    "since": "1.0.0",
    "group": "keys"
  },
  "EXPIRE": {
    "summary": "Set a timeout on an id",
    "complexity": "O(1)",
    "arguments":[
      {
        "name": "key",
        "type": "string"
      },
      {
        "name": "id",
        "type": "string"
      },
      {
        "name": "seconds",
        "type": "double"
      }
    ],
    "since": "1.0.0",
    "group": "keys"
  },
  "TTL": {
    "summary": "Get a timeout on an id",
    "complexity": "O(1)",
    "arguments":[
      {
        "name": "key",
        "type": "string"
      },
      {
        "name": "id",
        "type": "string"
      }
    ],
    "since": "1.0.0",
    "group": "keys"
  },
  "PERSIST": {
    "summary": "Remove the existing timeout on an id",
    "complexity": "O(1)",
    "arguments":[
      {
        "name": "key",
        "type": "string"
      },
      {
        "name": "id",
        "type": "string"
      }
    ],
    "since": "1.0.0",
    "group": "keys"
  },
  "FSET": {
    "summary": "Set the value for one or more fields of an id",
    "complexity": "O(1)",
    "arguments":[
      {
        "name": "key",
        "type": "string"
      },
      {
        "name": "id",
        "type": "string"
      },
      {
        "command": "XX",
        "name": [],
        "type": [],
        "optional": true
      },
      {
        "name": ["field","value"],
        "type": ["string","double"]
      },
      {
        "name": ["field","value"],
        "type": ["string","double"],
        "multiple": true,
        "optional": true
      }
    ],
    "since": "1.0.0",
    "group": "keys"
  },
  "BOUNDS": {
    "summary": "Get the combined bounds of all the objects in a key",
    "complexity": "O(1)",
    "arguments":[
      {
        "name": "key",
        "type": "string"
      }
    ],
    "since": "1.3.0",
    "group": "keys"
  },
  "GET": {
    "summary": "Get the object of an id",
    "complexity": "O(1)",
    "arguments":[
      {
        "name": "key",
        "type": "string"
      },
      {
        "name": "id",
        "type": "string"
      },
      {
        "command": "WITHFIELDS",
        "name": [],
        "type": [],
        "optional": true
      },
      {
        "name": "type",
        "optional": true,
        "enumargs": [
          {
            "name": "OBJECT"
          },
          {
            "name": "POINT"
          },
          {
            "name": "BOUNDS"
          },
          {
            "name": "HASH",
            "arguments": [
              {
                "name": "geohash",
                "type": "geohash"
              }
            ]
          }
        ]
      }
    ],
    "since": "1.0.0",
    "group": "keys"
  },
  "DEL": {
    "summary": "Delete an id from a key",
    "complexity": "O(1)",
    "arguments":[
      {
        "name": "key",
        "type": "string"
      },
      {
        "name": "id",
        "type": "string"
      }
    ],
    "since": "1.0.0",
    "group": "keys"
  },
  "DROP": {
    "summary": "Remove a key from the database",
    "complexity": "O(1)",
    "arguments":[
      {
        "name": "key",
        "type": "string"
      }
    ],
    "since": "1.0.0",
    "group": "keys"
  },
  "RENAME": {
    "summary": "Rename a key to be stored under a different name.",
    "complexity": "O(1)",
    "arguments": [
      {
        "name": "key",
        "type": "string"
      },
      {
        "name": "newkey",
        "type": "string"
      }
    ],
    "since": "1.14.5",
    "group": "keys"
  },
  "RENAMENX": {
    "summary": "Rename a key to be stored under a different name, if a new key does not exist.",
    "complexity": "O(1)",
    "arguments": [
      {
        "name": "key",
        "type": "string"
      },
      {
        "name": "newkey",
        "type": "string"
      }
    ],
    "since": "1.14.5",
    "group": "keys"
  },
  "KEYS": {
    "summary": "Finds all keys matching the given pattern",
    "complexity": "O(N) where N is the number of keys in the database",
    "arguments":[
      {
        "name": "pattern",
        "type": "pattern"
      }
    ],
    "since": "1.0.0",
    "group": "keys"
  },
  "STATS": {
    "summary": "Show stats for one or more keys",
    "complexity": "O(N) where N is the number of keys being requested",
    "arguments":[
      {
        "name": "key",
        "type": "string",
        "variadic": true
      }
    ],
    "since": "1.0.0",
    "group": "keys"
  },
  "SEARCH": {
    "summary": "Search for string values in a key",
    "complexity": "O(N) where N is the number of values in the key",
    "arguments":[
      {
        "name": "key",
        "type": "string"
      },
      {
        "command": "CURSOR",
        "name": "start",
        "type": "integer",
        "optional": true
      },
      {
        "command": "LIMIT",
        "name": "count",
        "type": "integer",
        "optional": true
      },
      {
        "command": "MATCH",
        "name": "pattern",
        "type": "pattern",
        "optional": true
      },
      {
        "name": "order",
        "optional": true,
        "enumargs": [
          {
            "name": "ASC"
          },
          {
            "name": "DESC"
          }
		]
	  },
      {
        "command": "WHERE",
        "name": ["field","min","max"],
        "type": ["string","double","double"],
        "optional": true,
        "multiple": true
      },
      {
        "command": "WHEREIN",
        "name": ["field","count","value"],
        "type": ["string","integer","double"],
        "optional": true,
        "multiple": true,
        "variadic": true
      },
      {
        "command": "WHEREEVAL",
        "name": ["script","numargs","arg"],
        "type": ["string","integer","string"],
        "optional": true,
        "multiple": true,
        "variadic": true
      },
      {
        "command": "WHEREEVALSHA",
        "name": ["sha1","numargs","arg"],
        "type": ["string","integer","string"],
        "optional": true,
        "multiple": true,
        "variadic": true
      },
      {
        "command": "NOFIELDS",
        "name": [],
        "type": [],
        "optional": true
      },
      {
        "name": "type",
        "optional": true,
        "enumargs": [
          {
            "name": "COUNT"
          },
          {
            "name": "IDS"
          }
        ]
      }
    ],
    "since": "1.4.2",
    "group": "search"
  },
  "SCAN": {
    "summary": "Incrementally iterate though a key",
    "complexity": "O(N) where N is the number of ids in the key",
    "arguments":[
      {
        "name": "key",
        "type": "string"
      },
      {
        "command": "CURSOR",
        "name": "start",
        "type": "integer",
        "optional": true
      },
      {
        "command": "LIMIT",
        "name": "count",
        "type": "integer",
        "optional": true
      },
      {
        "command": "MATCH",
        "name": "pattern",
        "type": "pattern",
        "optional": true
      },
      {
        "name": "order",
        "optional": true,
        "enumargs": [
          {
            "name": "ASC"
          },
          {
            "name": "DESC"
          }
		]
	  },
      {
        "command": "WHERE",
        "name": ["field","min","max"],
        "type": ["string","double","double"],
        "optional": true,
        "multiple": true
      },
      {
        "command": "WHEREIN",
        "name": ["field","count","value"],
        "type": ["string","integer","double"],
        "optional": true,
        "multiple": true,
        "variadic": true
      },
      {
        "command": "WHEREEVAL",
        "name": ["script","numargs","arg"],
        "type": ["string","integer","string"],
        "optional": true,
        "multiple": true,
        "variadic": true
      },
      {
        "command": "WHEREEVALSHA",
        "name": ["sha1","numargs","arg"],
        "type": ["string","integer","string"],
        "optional": true,
        "multiple": true,
        "variadic": true
      },
      {
        "command": "NOFIELDS",
        "name": [],
        "type": [],
        "optional": true
      },
      {
        "name": "type",
        "optional": true,
        "enumargs": [
          {
            "name": "COUNT"
          },
          {
            "name": "IDS"
          },
          {
            "name": "OBJECTS"
          },
          {
            "name": "POINTS"
          },
          {
            "name": "BOUNDS"
          },
          {
            "name": "HASHES",
            "arguments": [
              {
                "name": "precision",
                "type": "integer"
              }
            ]
          }
        ]
      }
    ],
    "since": "1.0.0",
    "group": "search"
  },
  "NEARBY": {
    "summary": "Searches for ids that are nearby a point",
    "complexity": "O(log(N)) where N is the number of ids in the area",
    "arguments":[
      {
        "name": "key",
        "type": "string"
      },
      {
        "command": "CURSOR",
        "name": "start",
        "type": "integer",
        "optional": true
      },
      {
        "command": "LIMIT",
        "name": "count",
        "type": "integer",
        "optional": true
      },
      {
        "command": "SPARSE",
        "name": "spread",
        "type": "integer",
        "optional": true
      },
      {
        "command": "MATCH",
        "name": "pattern",
        "type": "pattern",
        "optional": true
      },
      {
        "command": "DISTANCE",
        "name": [],
        "type": [],
        "optional": true
      },
      {
        "command": "WHERE",
        "name": ["field","min","max"],
        "type": ["string","double","double"],
        "optional": true,
        "multiple": true
      },
      {
        "command": "WHEREIN",
        "name": ["field","count","value"],
        "type": ["string","integer","double"],
        "optional": true,
        "multiple": true,
        "variadic": true
      },
      {
        "command": "WHEREEVAL",
        "name": ["script","numargs","arg"],
        "type": ["string","integer","string"],
        "optional": true,
        "multiple": true,
        "variadic": true
      },
      {
        "command": "WHEREEVALSHA",
        "name": ["sha1","numargs","arg"],
        "type": ["string","integer","string"],
        "optional": true,
        "multiple": true,
        "variadic": true
      },
      {
        "command": "NOFIELDS",
        "name": [],
        "type": [],
        "optional": true
      },
      {
        "command": "FENCE",
        "name": [],
        "type": [],
        "optional": true
      },
      {
        "command": "DETECT",
        "name": ["what"],
        "type": ["string"],
        "optional": true
      },
      {
        "command": "COMMANDS",
        "name": ["which"],
        "type": ["string"],
        "optional": true
      },
      {
        "name": "type",
        "optional": true,
        "enumargs": [
          {
            "name": "COUNT"
          },
          {
            "name": "IDS"
          },
          {
            "name": "OBJECTS"
          },
          {
            "name": "POINTS"
          },
          {
            "name": "BOUNDS"
          },
          {
            "name": "HASHES",
            "arguments": [
              {
                "name": "precision",
                "type": "integer"
              }
            ]
          }
        ]
      },
      {
        "name": "area",
        "enumargs": [
          {
            "name": "POINT",
            "arguments": [
              {
                "name": "lat",
                "type": "double"
              },
              {
                "name": "lon",
                "type": "double"
              },
              {
                "name": "meters",
                "type": "double"
              }
            ]
          },
          {
            "name": "ROAM",
            "arguments":[
              {
                "name": "key",
                "type": "string"
              },
              {
                "name": "pattern",
                "type": "pattern"
              },
              {
                "name": "meters",
                "type": "double"
              }
            ]
          }
        ]
      }
    ],
    "since": "1.0.0",
    "group": "search"
  },
  "WITHIN": {
    "summary": "Searches for ids that completely within the area",
    "complexity": "O(log(N)) where N is the number of ids in the area",
    "arguments":[
      {
        "name": "key",
        "type": "string"
      },
      {
        "command": "CURSOR",
        "name": "start",
        "type": "integer",
        "optional": true
      },
      {
        "command": "LIMIT",
        "name": "count",
        "type": "integer",
        "optional": true
      },
      {
        "command": "SPARSE",
        "name": "spread",
        "type": "integer",
        "optional": true
      },
      {
        "command": "MATCH",
        "name": "pattern",
        "type": "pattern",
        "optional": true
      },
      {
        "command": "WHERE",
        "name": ["field","min","max"],
        "type": ["string","double","double"],
        "optional": true,
        "multiple": true
      },
      {
        "command": "WHEREIN",
        "name": ["field","count","value"],
        "type": ["string","integer","double"],
        "optional": true,
        "multiple": true,
        "variadic": true
      },
      {
        "command": "WHEREEVAL",
        "name": ["script","numargs","arg"],
        "type": ["string","integer","string"],
        "optional": true,
        "multiple": true,
        "variadic": true
      },
      {
        "command": "WHEREEVALSHA",
        "name": ["sha1","numargs","arg"],
        "type": ["string","integer","string"],
        "optional": true,
        "multiple": true,
        "variadic": true
      },
      {
        "command": "NOFIELDS",
        "name": [],
        "type": [],
        "optional": true
      },
      {
        "command": "FENCE",
        "name": [],
        "type": [],
        "optional": true
      },
      {
        "command": "DETECT",
        "name": ["what"],
        "type": ["string"],
        "optional": true
      },
      {
        "command": "COMMANDS",
        "name": ["which"],
        "type": ["string"],
        "optional": true
      },
      {
        "name": "type",
        "optional": true,
        "enumargs": [
          {
            "name": "COUNT"
          },
          {
            "name": "IDS"
          },
          {
            "name": "OBJECTS"
          },
          {
            "name": "POINTS"
          },
          {
            "name": "BOUNDS"
          },
          {
            "name": "HASHES",
            "arguments": [
              {
                "name": "precision",
                "type": "integer"
              }
            ]
          }
        ]
      },
      {
        "name": "area",
        "enumargs": [
          {
            "name": "GET",
            "arguments": [
              {
                "name": "key",
                "type": "string"
              },
              {
                "name": "id",
                "type": "string"
              }
            ]
          },
          {
            "name": "BOUNDS",
            "arguments":[
              {
                "name": "minlat",
                "type": "double"
              },
              {
                "name": "minlon",
                "type": "double"
              },
              {
                "name": "maxlat",
                "type": "double"
              },
              {
                "name": "maxlon",
                "type": "double"
              }
            ]
          },
          {
            "name": "OBJECT",
            "arguments":[
              {
                "name": "geojson",
                "type": "geojson"
              }
            ]
          },
          {
            "name": "CIRCLE",
            "arguments": [
              {
                "name": "lat",
                "type": "double"
              },
              {
                "name": "lon",
                "type": "double"
              },
              {
                "name": "meters",
                "type": "double"
              }
            ]
          },
          {
            "name": "TILE",
            "arguments":[
              {
                "name": "x",
                "type": "double"
              },
              {
                "name": "y",
                "type": "double"
              },
              {
                "name": "z",
                "type": "double"
              }
            ]
          },
          {
            "name": "QUADKEY",
            "arguments":[
              {
                "name": "quadkey",
                "type": "string"
              }
            ]
          },
          {
            "name": "HASH",
            "arguments": [
              {
                "name": "geohash",
                "type": "geohash"
              }
            ]
          }
        ]
      }
    ],
    "since": "1.0.0",
    "group": "search"
  },
  "INTERSECTS": {
    "summary": "Searches for ids that intersect an area",
    "complexity": "O(log(N)) where N is the number of ids in the area",
    "arguments":[
      {
        "name": "key",
        "type": "string"
      },
      {
        "command": "CURSOR",
        "name": "start",
        "type": "integer",
        "optional": true
      },
      {
        "command": "LIMIT",
        "name": "count",
        "type": "integer",
        "optional": true
      },
      {
        "command": "SPARSE",
        "name": "spread",
        "type": "integer",
        "optional": true
      },
      {
        "command": "MATCH",
        "name": "pattern",
        "type": "pattern",
        "optional": true
      },
      {
        "command": "WHERE",
        "name": ["field","min","max"],
        "type": ["string","double","double"],
        "optional": true,
        "multiple": true
      },
      {
        "command": "WHEREIN",
        "name": ["field","count","value"],
        "type": ["string","integer","double"],
        "optional": true,
        "multiple": true,
        "variadic": true
      },
      {
        "command": "WHEREEVAL",
        "name": ["script","numargs","arg"],
        "type": ["string","integer","string"],
        "optional": true,
        "multiple": true,
        "variadic": true
      },
      {
        "command": "WHEREEVALSHA",
        "name": ["sha1","numargs","arg"],
        "type": ["string","integer","string"],
        "optional": true,
        "multiple": true,
        "variadic": true
      },
      {
        "command": "CLIP",
        "name": [],
        "type": [],
        "optional": true
      },
      {
        "command": "NOFIELDS",
        "name": [],
        "type": [],
        "optional": true
      },
      {
        "command": "FENCE",
        "name": [],
        "type": [],
        "optional": true
      },
      {
        "command": "DETECT",
        "name": ["what"],
        "type": ["string"],
        "optional": true
      },
      {
        "command": "COMMANDS",
        "name": ["which"],
        "type": ["string"],
        "optional": true
      },
      {
        "name": "type",
        "optional": true,
        "enumargs": [
          {
            "name": "COUNT"
          },
          {
            "name": "IDS"
          },
          {
            "name": "OBJECTS"
          },
          {
            "name": "POINTS"
          },
          {
            "name": "BOUNDS"
          },
          {
            "name": "HASHES",
            "arguments": [
              {
                "name": "precision",
                "type": "integer"
              }
            ]
          }
        ]
      },
      {
        "name": "area",
        "enumargs": [
          {
            "name": "GET",
            "arguments": [
              {
                "name": "key",
                "type": "string"
              },
              {
                "name": "id",
                "type": "string"
              }
            ]
          },
          {
            "name": "BOUNDS",
            "arguments":[
              {
                "name": "minlat",
                "type": "double"
              },
              {
                "name": "minlon",
                "type": "double"
              },
              {
                "name": "maxlat",
                "type": "double"
              },
              {
                "name": "maxlon",
                "type": "double"
              }
            ]
          },
          {
            "name": "OBJECT",
            "arguments":[
              {
                "name": "geojson",
                "type": "geojson"
              }
            ]
          },
          {
            "name": "CIRCLE",
            "arguments": [
              {
                "name": "lat",
                "type": "double"
              },
              {
                "name": "lon",
                "type": "double"
              },
              {
                "name": "meters",
                "type": "double"
              }
            ]
          },
          {
            "name": "TILE",
            "arguments":[
              {
                "name": "x",
                "type": "double"
              },
              {
                "name": "y",
                "type": "double"
              },
              {
                "name": "z",
                "type": "double"
              }
            ]
          },
          {
            "name": "QUADKEY",
            "arguments":[
              {
                "name": "quadkey",
                "type": "string"
              }
            ]
          },
          {
            "name": "HASH",
            "arguments": [
              {
                "name": "geohash",
                "type": "geohash"
              }
            ]
          }
        ]
      }
    ],
    "since": "1.0.0",
    "group": "search"
  },
  "CONFIG GET": {
    "summary": "Get the value of a configuration parameter",
    "arguments":[
      {
        "name": "parameter",
        "type": "string"
      }
    ],
    "group": "server"
  },
  "CONFIG SET": {
    "summary": "Set a configuration parameter to the given value",
    "arguments":[
      {
        "name": "parameter",
        "type": "string"
      },
      {
        "name": "value",
        "type": "string",
        "optional": true
      }
    ],
    "group": "server"
  },
  "CONFIG REWRITE": {
    "summary": "Rewrite the configuration file with the in memory configuration",
    "arguments":[],
    "group": "server"
  },
  "SERVER": {
    "summary":"Show server stats and details",
    "complexity": "O(1)",
    "arguments": [],
    "since": "1.0.0",
    "group": "server"
  },
  "GC": {
    "summary":"Forces a garbage collection",
    "complexity": "O(1)",
    "arguments": [],
    "since": "1.0.0",
    "group": "server"
  },
  "READONLY": {
    "summary": "Turns on or off readonly mode",
    "complexity": "O(1)",
    "arguments": [
      {
        "enum": ["yes","no"]
      }
    ],
    "since": "1.0.0",
    "group": "server"
  },
  "FLUSHDB": {
    "summary":"Removes all keys",
    "complexity": "O(1)",
    "arguments": [],
    "since": "1.0.0",
    "group": "server"
  },
  "FOLLOW": {
    "summary": "Follows a leader host",
    "complexity": "O(1)",
    "arguments": [
      {
        "name": "host",
        "type": "string"
      },
      {
        "name": "port",
        "type": "integer"
      }
    ],
    "since": "1.0.0",
    "group": "replication"
  },
  "AOF": {
    "summary": "Downloads the AOF starting from pos and keeps the connection alive",
    "complexity": "O(1)",
    "arguments": [
      {
        "name": "pos",
        "type": "integer"
      }
    ],
    "since": "1.0.0",
    "group": "replication"
  },
  "AOFMD5": {
    "summary": "Performs a checksum on a portion of the aof",
    "complexity": "O(1)",
    "arguments": [
      {
        "name": "pos",
        "type": "integer"
      },
      {
        "name": "size",
        "type": "integer"
      }
    ],
    "since": "1.0.0",
    "group": "replication"
  },
  "AOFSHRINK": {
    "summary": "Shrinks the aof in the background",
    "group": "replication"
  },
  "PING": {
    "summary": "Ping the server",
    "group": "connection"
  },
  "QUIT": {
    "summary": "Close the connection",
    "group": "connection"
  },
  "AUTH": {
    "summary": "Authenticate to the server",
    "arguments": [
      {
        "name": "password",
        "type": "string"
      }
    ],
    "group": "connection"
  },
  "OUTPUT": {
    "summary": "Gets or sets the output format for the current connection.",
    "arguments": [
      {
        "name": "format",
        "optional": true,
        "enumargs": [
          {
            "name": "json"
          },
          {
            "name": "resp"
          }
        ]
      }
    ],
    "group": "connection"
  },
  "TIMEOUT": {
    "summary": "Runs the following command with the timeout",
    "arguments": [
      {
        "name": "seconds",
        "type": "double"
      },
      {
        "name": "COMMAND",
        "type": "string"
      },
      {
        "command": "arg",
        "type": "string",
        "multiple": true,
        "optional": true
      }
    ],
    "group": "connection"
  },
  "SETHOOK": {
    "summary": "Creates a webhook which points to geofenced search",
    "arguments": [
      {
        "name": "name",
        "type": "string"
      },
      {
        "name": "endpoint",
        "type": "string"
      },
      {
        "command": "META",
        "name": ["name", "value"],
        "type": ["string", "string"],
        "optional": true,
		    "multiple": true
      },
      {
        "command": "EX",
        "name": ["seconds"],
        "type": ["double"],
        "optional": true,
        "multiple": false
      },
      {
        "enum": ["NEARBY", "WITHIN", "INTERSECTS"]
      },
      {
        "name": "key",
        "type": "string"
      },
      {
        "command": "FENCE",
        "name": [],
        "type": []
      },
      {
        "command": "DETECT",
        "name": ["what"],
        "type": ["string"],
        "optional": true
      },
      {
        "command": "COMMANDS",
        "name": ["which"],
        "type": ["string"],
        "optional": true
      },
      {
        "name": "param",
        "type": "string",
        "variadic": true
      }

    ],
    "group": "webhook"
  },
  "DELHOOK": {
    "summary": "Removes a webhook",
    "arguments": [
      {
        "name": "name",
        "type": "string"
      }
    ],
    "group": "webhook"
  },
  "HOOKS": {
    "summary": "Finds all hooks matching a pattern",
    "arguments":[
      {
        "name": "pattern",
        "type": "pattern"
      }
    ],
    "group": "webhook"
  },
  "PDELHOOK": {
    "summary": "Removes all hooks matching a pattern",
    "arguments":[
      {
        "name": "pattern",
        "type": "pattern"
      }
    ],
    "group": "webhook"
  },

  "SETCHAN": {
    "summary": "Creates a pubsub channel which points to geofenced search",
    "arguments": [
      {
        "name": "name",
        "type": "string"
      },
      {
        "command": "META",
        "name": ["name", "value"],
        "type": ["string", "string"],
        "optional": true,
		    "multiple": true
      },
      {
        "command": "EX",
        "name": ["seconds"],
        "type": ["double"],
        "optional": true,
        "multiple": false
      },
      {
        "enum": ["NEARBY", "WITHIN", "INTERSECTS"]
      },
      {
        "name": "key",
        "type": "string"
      },
      {
        "command": "FENCE",
        "name": [],
        "type": []
      },
      {
        "command": "DETECT",
        "name": ["what"],
        "type": ["string"],
        "optional": true
      },
      {
        "command": "COMMANDS",
        "name": ["which"],
        "type": ["string"],
        "optional": true
      },
      {
        "name": "param",
        "type": "string",
        "variadic": true
      }

    ],
    "group": "pubsub"
  },
  "DELCHAN": {
    "summary": "Removes a channel",
    "arguments": [
      {
        "name": "name",
        "type": "string"
      }
    ],
    "group": "pubsub"
  },
  "CHANS": {
    "summary": "Finds all channels matching a pattern",
    "arguments":[
      {
        "name": "pattern",
        "type": "pattern"
      }
    ],
    "group": "pubsub"
  },
  "PDELCHAN": {
    "summary": "Removes all channels matching a pattern",
    "arguments":[
      {
        "name": "pattern",
        "type": "pattern"
      }
    ],
    "group": "pubsub"
  },
  "SUBSCRIBE": {
    "summary": "Subscribe to a geofence channel",
    "arguments":[
      {
        "name": "channel",
        "type": "string",
        "variadic": true
      }
    ],
    "group": "pubsub"
  },
  "PSUBSCRIBE": {
    "summary": "Subscribes the client to the given patterns",
    "arguments":[
      {
        "name": "pattern",
        "type": "pattern",
        "variadic": true
      }
    ],
    "group": "pubsub"
  },
  "PDEL": {
    "summary": "Removes all objects matching a pattern",
    "arguments":[
      {
        "name": "key",
        "type": "string"
      },
	  {
        "name": "pattern",
        "type": "pattern"
      }
    ],
    "group": "keys"
  },
  "JGET": {
    "summary": "Get a value from a JSON document",
    "complexity": "O(1)",
    "arguments":[
      {
        "name": "key",
        "type": "string"
      },
      {
        "name": "id",
        "type": "string"
      },
      {
        "name": "path",
        "type": "string"
      },
      {
        "command": "RAW",
        "name": [],
        "type": [],
        "optional": true
      }
    ],
    "group": "keys"
  },
  "JSET": {
    "summary": "Set a value in a JSON document",
    "complexity": "O(1)",
    "arguments":[
      {
        "name": "key",
        "type": "string"
      },
      {
        "name": "id",
        "type": "string"
      },
      {
        "name": "path",
        "type": "string"
      },
      {
        "name": "value",
        "type": "string"
      },
      {
        "name": [],
        "optional": true,
        "enumargs": [
          {
            "name": "RAW"
          },
          {
            "name": "STR"
          }
        ]
      }
    ],
    "group": "keys"
  },
  "JDEL": {
    "summary": "Delete a value from a JSON document",
    "complexity": "O(1)",
    "arguments":[
      {
        "name": "key",
        "type": "string"
      },
      {
        "name": "id",
        "type": "string"
      },
      {
        "name": "path",
        "type": "string"
      }
    ],
    "group": "keys"
  },
  "EVAL":{
    "summary": "Evaluates a Lua script",
    "complexity": "Depends on the evaluated script",
    "arguments": [
      {
        "name": "script",
        "type": "string"
      },
      {
        "name": "numkeys",
        "type": "integer"
      },
      {
        "name": "key",
        "type": "string",
        "optional": true,
        "multiple": true
      },
      {
        "name": "arg",
        "type": "string",
        "optional": true,
        "multiple": true
      }
    ],
    "since": "1.10.0",
    "group": "scripting"
  },
  "EVALSHA":{
    "summary": "Evaluates a Lua script cached on the server by its SHA1 digest",
    "complexity": "Depends on the evaluated script",
    "arguments": [
      {
        "name": "sha1",
        "type": "string"
      },
      {
        "name": "numkeys",
        "type": "integer"
      },
      {
        "name": "key",
        "type": "string",
        "optional": true,
        "multiple": true
      },
      {
        "name": "arg",
        "type": "string",
        "optional": true,
        "multiple": true
      }
    ],
    "since": "1.10.0",
    "group": "scripting"
  },
  "EVALRO":{
    "summary": "Evaluates a read-only Lua script",
    "complexity": "Depends on the evaluated script",
    "arguments": [
      {
        "name": "script",
        "type": "string"
      },
      {
        "name": "numkeys",
        "type": "integer"
      },
      {
        "name": "key",
        "type": "string",
        "optional": true,
        "multiple": true
      },
      {
        "name": "arg",
        "type": "string",
        "optional": true,
        "multiple": true
      }
    ],
    "since": "1.10.0",
    "group": "scripting"
  },
  "EVALROSHA":{
    "summary": "Evaluates a read-only Lua script cached on the server by its SHA1 digest",
    "complexity": "Depends on the evaluated script",
    "arguments": [
      {
        "name": "script",
        "type": "string"
      },
      {
        "name": "numkeys",
        "type": "integer"
      },
      {
        "name": "key",
        "type": "string",
        "optional": true,
        "multiple": true
      },
      {
        "name": "arg",
        "type": "string",
        "optional": true,
        "multiple": true
      }
    ],
    "since": "1.10.0",
    "group": "scripting"
  },
  "EVALNA":{
    "summary": "Evaluates a Lua script in a non-atomic fashion",
    "complexity": "Depends on the evaluated script",
    "arguments": [
      {
        "name": "script",
        "type": "string"
      },
      {
        "name": "numkeys",
        "type": "integer"
      },
      {
        "name": "key",
        "type": "string",
        "optional": true,
        "multiple": true
      },
      {
        "name": "arg",
        "type": "string",
        "optional": true,
        "multiple": true
      }
    ],
    "since": "1.10.0",
    "group": "scripting"
  },
  "EVALNASHA":{
    "summary": "Evaluates, in a non-atomic fashion, a Lua script cached on the server by its SHA1 digest",
    "complexity": "Depends on the evaluated script",
    "arguments": [
      {
        "name": "sha1",
        "type": "string"
      },
      {
        "name": "numkeys",
        "type": "integer"
      },
      {
        "name": "key",
        "type": "string",
        "optional": true,
        "multiple": true
      },
      {
        "name": "arg",
        "type": "string",
        "optional": true,
        "multiple": true
      }
    ],
    "since": "1.10.0",
    "group": "scripting"
  },
  "SCRIPT EXISTS":{
    "summary": "Returns information about the existence of the scripts in server cache",
    "complexity": "O(N) where N is the number of provided sha1 arguments",
    "arguments": [
      {
        "name": "sha1",
        "type": "string",
        "multiple": true
      }
    ],
    "since": "1.10.0",
    "group": "scripting"
  },
  "SCRIPT LOAD":{
    "summary": "Loads the compiled version of a script into the server cache, without executing",
    "complexity": "O(N) where N is the number of bytes in the script",
    "arguments": [
      {
        "name": "script",
        "type": "string"
      }
    ],
    "since": "1.10.0",
    "group": "scripting"
  },
  "SCRIPT FLUSH":{
    "summary": "Flushes the server cache of Lua scripts",
    "complexity": "O(1)",
    "since": "1.10.0",
    "group": "scripting"
  },
  "TEST":{
    "summary": "Performs spatial test",
    "complexity": "One test per command, complexity depends on the test",
    "arguments": [
      {
        "name": "area1",
        "enumargs": [
          {
            "name": "POINT",
            "arguments": [
              {
                "name": "lat",
                "type": "double"
              },
              {
                "name": "lon",
                "type": "double"
              }
            ]
          },
          {
            "name": "GET",
            "arguments": [
              {
                "name": "key",
                "type": "string"
              },
              {
                "name": "id",
                "type": "string"
              }
            ]
          },
          {
            "name": "BOUNDS",
            "arguments":[
              {
                "name": "minlat",
                "type": "double"
              },
              {
                "name": "minlon",
                "type": "double"
              },
              {
                "name": "maxlat",
                "type": "double"
              },
              {
                "name": "maxlon",
                "type": "double"
              }
            ]
          },
          {
            "name": "OBJECT",
            "arguments":[
              {
                "name": "geojson",
                "type": "geojson"
              }
            ]
          },
          {
            "name": "CIRCLE",
            "arguments": [
              {
                "name": "lat",
                "type": "double"
              },
              {
                "name": "lon",
                "type": "double"
              },
              {
                "name": "meters",
                "type": "double"
              }
            ]
          },
          {
            "name": "TILE",
            "arguments":[
              {
                "name": "x",
                "type": "double"
              },
              {
                "name": "y",
                "type": "double"
              },
              {
                "name": "z",
                "type": "double"
              }
            ]
          },
          {
            "name": "QUADKEY",
            "arguments":[
              {
                "name": "quadkey",
                "type": "string"
              }
            ]
          },
          {
            "name": "HASH",
            "arguments": [
              {
                "name": "geohash",
                "type": "geohash"
              }
            ]
          }
        ]
      },
      {
        "name": "test",
        "enumargs": [
          {
            "name": "INTERSECTS"
          },
          {
            "name": "WITHIN"
          }
        ]
      },
      {
        "command": "CLIP",
        "name": [],
        "type": [],
        "optional": true
      },
      {
        "name": "area2",
        "enumargs": [
          {
            "name": "POINT",
            "arguments": [
              {
                "name": "lat",
                "type": "double"
              },
              {
                "name": "lon",
                "type": "double"
              }
            ]
          },
          {
            "name": "GET",
            "arguments": [
              {
                "name": "key",
                "type": "string"
              },
              {
                "name": "id",
                "type": "string"
              }
            ]
          },
          {
            "name": "BOUNDS",
            "arguments":[
              {
                "name": "minlat",
                "type": "double"
              },
              {
                "name": "minlon",
                "type": "double"
              },
              {
                "name": "maxlat",
                "type": "double"
              },
              {
                "name": "maxlon",
                "type": "double"
              }
            ]
          },
          {
            "name": "OBJECT",
            "arguments":[
              {
                "name": "geojson",
                "type": "geojson"
              }
            ]
          },
          {
            "name": "CIRCLE",
            "arguments": [
              {
                "name": "lat",
                "type": "double"
              },
              {
                "name": "lon",
                "type": "double"
              },
              {
                "name": "meters",
                "type": "double"
              }
            ]
          },
          {
            "name": "TILE",
            "arguments":[
              {
                "name": "x",
                "type": "double"
              },
              {
                "name": "y",
                "type": "double"
              },
              {
                "name": "z",
                "type": "double"
              }
            ]
          },
          {
            "name": "QUADKEY",
            "arguments":[
              {
                "name": "quadkey",
                "type": "string"
              }
            ]
          },
          {
            "name": "HASH",
            "arguments": [
              {
                "name": "geohash",
                "type": "geohash"
              }
            ]
          }
        ]
      }
    ],
    "since": "1.16.0",
    "group": "tests"
  }
}