<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="redis_v1beta1.html">Google Cloud Memorystore for Redis API</a> . <a href="redis_v1beta1.projects.html">projects</a> . <a href="redis_v1beta1.projects.locations.html">locations</a> . <a href="redis_v1beta1.projects.locations.instances.html">instances</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body, instanceId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a Redis instance based on the specified tier and memory size.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a specific Redis instance.  Instance stops serving and data is</p>
<p class="toc_element">
  <code><a href="#export">export(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Export Redis instance data into a Redis RDB format file in Cloud Storage.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the details of a specific Redis instance.</p>
<p class="toc_element">
  <code><a href="#import_">import_(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Import a Redis RDB snapshot file from Cloud Storage into a Redis instance.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageToken=None, x__xgafv=None, pageSize=None)</a></code></p>
<p class="firstline">Lists all Redis instances owned by a project in either the specified</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the metadata and configuration of a specific Redis instance.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body, instanceId=None, x__xgafv=None)</code>
  <pre>Creates a Redis instance based on the specified tier and memory size.

By default, the instance is accessible from the project's
[default network](/compute/docs/networks-and-firewalls#networks).

The creation is executed asynchronously and callers may check the returned
operation to track its progress. Once the operation is completed the Redis
instance will be fully functional. Completed longrunning.Operation will
contain the new instance object in the response field.

The returned operation is automatically deleted after a few hours, so there
is no need to call DeleteOperation.

Args:
  parent: string, Required. The resource name of the instance location using the form:
    `projects/{project_id}/locations/{location_id}`
where `location_id` refers to a GCP region. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A Google Cloud Redis instance.
  "labels": { # Resource labels to represent user provided metadata
    "a_key": "A String",
  },
  "displayName": "A String", # An arbitrary and optional user-provided name for the instance.
  "name": "A String", # Required. Unique name of the resource in this scope including project and
      # location using the form:
      #     `projects/{project_id}/locations/{location_id}/instances/{instance_id}`
      # 
      # Note: Redis instances are managed and addressed at regional level so
      # location_id here refers to a GCP region; however, users may choose which
      # specific zone (or collection of zones for cross-zone instances) an instance
      # should be provisioned in. Refer to [location_id] and
      # [alternative_location_id] fields for more details.
  "alternativeLocationId": "A String", # Optional. Only applicable to STANDARD_HA tier which protects the instance
      # against zonal failures by provisioning it across two zones. If provided, it
      # must be a different zone from the one provided in [location_id].
  "currentLocationId": "A String", # Output only. The current zone where the Redis endpoint is placed. For Basic
      # Tier instances, this will always be the same as the [location_id]
      # provided by the user at creation time. For Standard Tier instances,
      # this can be either [location_id] or [alternative_location_id] and can
      # change after a failover event.
  "reservedIpRange": "A String", # Optional. The CIDR range of internal addresses that are reserved for this
      # instance. If not provided, the service will choose an unused /29 block,
      # for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique
      # and non-overlapping with existing subnets in an authorized network.
  "redisVersion": "A String", # Optional. The version of Redis software.
      # If not provided, latest supported version will be used. Updating the
      # version will perform an upgrade/downgrade to the new version. Currently,
      # the supported values are:
      # 
      #  *   `REDIS_4_0` for Redis 4.0 compatibility
      #  *   `REDIS_3_2` for Redis 3.2 compatibility (default)
  "state": "A String", # Output only. The current state of this instance.
  "createTime": "A String", # Output only. The time the instance was created.
  "memorySizeGb": 42, # Required. Redis memory size in GiB.
  "host": "A String", # Output only. Hostname or IP address of the exposed Redis endpoint used by
      # clients to connect to the service.
  "persistenceIamIdentity": "A String", # Output only. Cloud IAM identity used by import / export operations to
      # transfer data to/from Cloud Storage. Format is
      # "serviceAccount:<service_account_email>". The value may change over time
      # for a given instance so should be checked before each import/export
      # operation.
  "authorizedNetwork": "A String", # Optional. The full name of the Google Compute Engine
      # [network](/compute/docs/networks-and-firewalls#networks) to which the
      # instance is connected. If left unspecified, the `default` network
      # will be used.
  "redisConfigs": { # Optional. Redis configuration parameters, according to
      # http://redis.io/topics/config. Currently, the only supported parameters
      # are:
      # 
      #  Redis 3.2 and above:
      # 
      #  *   maxmemory-policy
      #  *   notify-keyspace-events
      # 
      #  Redis 4.0 and above:
      # 
      #  *   activedefrag
      #  *   lfu-log-factor
      #  *   lfu-decay-time
    "a_key": "A String",
  },
  "tier": "A String", # Required. The service tier of the instance.
  "locationId": "A String", # Optional. The zone where the instance will be provisioned. If not provided,
      # the service will choose a zone for the instance. For STANDARD_HA tier,
      # instances will be created across two zones for protection against zonal
      # failures. If [alternative_location_id] is also provided, it must be
      # different from [location_id].
  "port": 42, # Output only. The port number of the exposed Redis endpoint.
  "statusMessage": "A String", # Output only. Additional information about the current status of this
      # instance, if available.
}

  instanceId: string, Required. The logical name of the Redis instance in the customer project
with the following restrictions:

* Must contain only lowercase letters, numbers, and hyphens.
* Must start with a letter.
* Must be between 1-40 characters.
* Must end with a number or a letter.
* Must be unique within the customer project / location
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "metadata": { # {
        #
        # `createTime`: The time the operation was created.
        #
        # `endTime`: The time the operation finished running.
        #
        # `target`: Server-defined resource path for the target of the operation.
        #
        # `verb`: Name of the verb executed by the operation.
        #
        # `statusDetail`: Human-readable status of the operation, if any.
        #
        # `cancelRequested`: Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.
        #
        # `apiVersion`: API version used to start the operation.
        #
        # }
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a specific Redis instance.  Instance stops serving and data is
deleted.

Args:
  name: string, Required. Redis instance resource name using the form:
    `projects/{project_id}/locations/{location_id}/instances/{instance_id}`
where `location_id` refers to a GCP region. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "metadata": { # {
        #
        # `createTime`: The time the operation was created.
        #
        # `endTime`: The time the operation finished running.
        #
        # `target`: Server-defined resource path for the target of the operation.
        #
        # `verb`: Name of the verb executed by the operation.
        #
        # `statusDetail`: Human-readable status of the operation, if any.
        #
        # `cancelRequested`: Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.
        #
        # `apiVersion`: API version used to start the operation.
        #
        # }
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="export">export(name, body, x__xgafv=None)</code>
  <pre>Export Redis instance data into a Redis RDB format file in Cloud Storage.

Redis will continue serving during this operation.

The returned operation is automatically deleted after a few hours, so
there is no need to call DeleteOperation.

Args:
  name: string, Required. Redis instance resource name using the form:
    `projects/{project_id}/locations/{location_id}/instances/{instance_id}`
where `location_id` refers to a GCP region. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request for Export.
    "outputConfig": { # The output content # Required. Specify data to be exported.
      "gcsDestination": { # The Cloud Storage location for the output content # Google Cloud Storage destination for output content.
        "uri": "A String", # Required. Data destination URI (e.g.
            # 'gs://my_bucket/my_object'). Existing files will be overwritten.
      },
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "metadata": { # {
        #
        # `createTime`: The time the operation was created.
        #
        # `endTime`: The time the operation finished running.
        #
        # `target`: Server-defined resource path for the target of the operation.
        #
        # `verb`: Name of the verb executed by the operation.
        #
        # `statusDetail`: Human-readable status of the operation, if any.
        #
        # `cancelRequested`: Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.
        #
        # `apiVersion`: API version used to start the operation.
        #
        # }
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets the details of a specific Redis instance.

Args:
  name: string, Required. Redis instance resource name using the form:
    `projects/{project_id}/locations/{location_id}/instances/{instance_id}`
where `location_id` refers to a GCP region. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Google Cloud Redis instance.
    "labels": { # Resource labels to represent user provided metadata
      "a_key": "A String",
    },
    "displayName": "A String", # An arbitrary and optional user-provided name for the instance.
    "name": "A String", # Required. Unique name of the resource in this scope including project and
        # location using the form:
        #     `projects/{project_id}/locations/{location_id}/instances/{instance_id}`
        #
        # Note: Redis instances are managed and addressed at regional level so
        # location_id here refers to a GCP region; however, users may choose which
        # specific zone (or collection of zones for cross-zone instances) an instance
        # should be provisioned in. Refer to [location_id] and
        # [alternative_location_id] fields for more details.
    "alternativeLocationId": "A String", # Optional. Only applicable to STANDARD_HA tier which protects the instance
        # against zonal failures by provisioning it across two zones. If provided, it
        # must be a different zone from the one provided in [location_id].
    "currentLocationId": "A String", # Output only. The current zone where the Redis endpoint is placed. For Basic
        # Tier instances, this will always be the same as the [location_id]
        # provided by the user at creation time. For Standard Tier instances,
        # this can be either [location_id] or [alternative_location_id] and can
        # change after a failover event.
    "reservedIpRange": "A String", # Optional. The CIDR range of internal addresses that are reserved for this
        # instance. If not provided, the service will choose an unused /29 block,
        # for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique
        # and non-overlapping with existing subnets in an authorized network.
    "redisVersion": "A String", # Optional. The version of Redis software.
        # If not provided, latest supported version will be used. Updating the
        # version will perform an upgrade/downgrade to the new version. Currently,
        # the supported values are:
        #
        #  *   `REDIS_4_0` for Redis 4.0 compatibility
        #  *   `REDIS_3_2` for Redis 3.2 compatibility (default)
    "state": "A String", # Output only. The current state of this instance.
    "createTime": "A String", # Output only. The time the instance was created.
    "memorySizeGb": 42, # Required. Redis memory size in GiB.
    "host": "A String", # Output only. Hostname or IP address of the exposed Redis endpoint used by
        # clients to connect to the service.
    "persistenceIamIdentity": "A String", # Output only. Cloud IAM identity used by import / export operations to
        # transfer data to/from Cloud Storage. Format is
        # "serviceAccount:<service_account_email>". The value may change over time
        # for a given instance so should be checked before each import/export
        # operation.
    "authorizedNetwork": "A String", # Optional. The full name of the Google Compute Engine
        # [network](/compute/docs/networks-and-firewalls#networks) to which the
        # instance is connected. If left unspecified, the `default` network
        # will be used.
    "redisConfigs": { # Optional. Redis configuration parameters, according to
        # http://redis.io/topics/config. Currently, the only supported parameters
        # are:
        #
        #  Redis 3.2 and above:
        #
        #  *   maxmemory-policy
        #  *   notify-keyspace-events
        #
        #  Redis 4.0 and above:
        #
        #  *   activedefrag
        #  *   lfu-log-factor
        #  *   lfu-decay-time
      "a_key": "A String",
    },
    "tier": "A String", # Required. The service tier of the instance.
    "locationId": "A String", # Optional. The zone where the instance will be provisioned. If not provided,
        # the service will choose a zone for the instance. For STANDARD_HA tier,
        # instances will be created across two zones for protection against zonal
        # failures. If [alternative_location_id] is also provided, it must be
        # different from [location_id].
    "port": 42, # Output only. The port number of the exposed Redis endpoint.
    "statusMessage": "A String", # Output only. Additional information about the current status of this
        # instance, if available.
  }</pre>
</div>

<div class="method">
    <code class="details" id="import_">import_(name, body, x__xgafv=None)</code>
  <pre>Import a Redis RDB snapshot file from Cloud Storage into a Redis instance.

Redis may stop serving during this operation. Instance state will be
IMPORTING for entire operation. When complete, the instance will contain
only data from the imported file.

The returned operation is automatically deleted after a few hours, so
there is no need to call DeleteOperation.

Args:
  name: string, Required. Redis instance resource name using the form:
    `projects/{project_id}/locations/{location_id}/instances/{instance_id}`
where `location_id` refers to a GCP region. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request for Import.
    "inputConfig": { # The input content # Required. Specify data to be imported.
      "gcsSource": { # The Cloud Storage location for the input content # Google Cloud Storage location where input content is located.
        "uri": "A String", # Required. Source data URI. (e.g. 'gs://my_bucket/my_object').
      },
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "metadata": { # {
        #
        # `createTime`: The time the operation was created.
        #
        # `endTime`: The time the operation finished running.
        #
        # `target`: Server-defined resource path for the target of the operation.
        #
        # `verb`: Name of the verb executed by the operation.
        #
        # `statusDetail`: Human-readable status of the operation, if any.
        #
        # `cancelRequested`: Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.
        #
        # `apiVersion`: API version used to start the operation.
        #
        # }
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, x__xgafv=None, pageSize=None)</code>
  <pre>Lists all Redis instances owned by a project in either the specified
location (region) or all locations.

The location should have the following format:
* `projects/{project_id}/locations/{location_id}`

If `location_id` is specified as `-` (wildcard), then all regions
available to the project are queried, and the results are aggregated.

Args:
  parent: string, Required. The resource name of the instance location using the form:
    `projects/{project_id}/locations/{location_id}`
where `location_id` refers to a GCP region. (required)
  pageToken: string, The next_page_token value returned from a previous List request,
if any.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  pageSize: integer, The maximum number of items to return.

If not specified, a default value of 1000 will be used by the service.
Regardless of the page_size value, the response may include a partial list
and a caller should only rely on response's
next_page_token
to determine if there are more instances left to be queried.

Returns:
  An object of the form:

    { # Response for ListInstances.
    "nextPageToken": "A String", # Token to retrieve the next page of results, or empty if there are no more
        # results in the list.
    "unreachable": [ # Locations that could not be reached.
      "A String",
    ],
    "instances": [ # A list of Redis instances in the project in the specified location,
        # or across all locations.
        #
        # If the `location_id` in the parent field of the request is "-", all regions
        # available to the project are queried, and the results aggregated.
        # If in such an aggregated query a location is unavailable, a dummy Redis
        # entry is included in the response with the "name" field set to a value of
        # the form projects/{project_id}/locations/{location_id}/instances/- and the
        # "status" field set to ERROR and "status_message" field set to "location not
        # available for ListInstances".
      { # A Google Cloud Redis instance.
        "labels": { # Resource labels to represent user provided metadata
          "a_key": "A String",
        },
        "displayName": "A String", # An arbitrary and optional user-provided name for the instance.
        "name": "A String", # Required. Unique name of the resource in this scope including project and
            # location using the form:
            #     `projects/{project_id}/locations/{location_id}/instances/{instance_id}`
            #
            # Note: Redis instances are managed and addressed at regional level so
            # location_id here refers to a GCP region; however, users may choose which
            # specific zone (or collection of zones for cross-zone instances) an instance
            # should be provisioned in. Refer to [location_id] and
            # [alternative_location_id] fields for more details.
        "alternativeLocationId": "A String", # Optional. Only applicable to STANDARD_HA tier which protects the instance
            # against zonal failures by provisioning it across two zones. If provided, it
            # must be a different zone from the one provided in [location_id].
        "currentLocationId": "A String", # Output only. The current zone where the Redis endpoint is placed. For Basic
            # Tier instances, this will always be the same as the [location_id]
            # provided by the user at creation time. For Standard Tier instances,
            # this can be either [location_id] or [alternative_location_id] and can
            # change after a failover event.
        "reservedIpRange": "A String", # Optional. The CIDR range of internal addresses that are reserved for this
            # instance. If not provided, the service will choose an unused /29 block,
            # for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique
            # and non-overlapping with existing subnets in an authorized network.
        "redisVersion": "A String", # Optional. The version of Redis software.
            # If not provided, latest supported version will be used. Updating the
            # version will perform an upgrade/downgrade to the new version. Currently,
            # the supported values are:
            #
            #  *   `REDIS_4_0` for Redis 4.0 compatibility
            #  *   `REDIS_3_2` for Redis 3.2 compatibility (default)
        "state": "A String", # Output only. The current state of this instance.
        "createTime": "A String", # Output only. The time the instance was created.
        "memorySizeGb": 42, # Required. Redis memory size in GiB.
        "host": "A String", # Output only. Hostname or IP address of the exposed Redis endpoint used by
            # clients to connect to the service.
        "persistenceIamIdentity": "A String", # Output only. Cloud IAM identity used by import / export operations to
            # transfer data to/from Cloud Storage. Format is
            # "serviceAccount:<service_account_email>". The value may change over time
            # for a given instance so should be checked before each import/export
            # operation.
        "authorizedNetwork": "A String", # Optional. The full name of the Google Compute Engine
            # [network](/compute/docs/networks-and-firewalls#networks) to which the
            # instance is connected. If left unspecified, the `default` network
            # will be used.
        "redisConfigs": { # Optional. Redis configuration parameters, according to
            # http://redis.io/topics/config. Currently, the only supported parameters
            # are:
            #
            #  Redis 3.2 and above:
            #
            #  *   maxmemory-policy
            #  *   notify-keyspace-events
            #
            #  Redis 4.0 and above:
            #
            #  *   activedefrag
            #  *   lfu-log-factor
            #  *   lfu-decay-time
          "a_key": "A String",
        },
        "tier": "A String", # Required. The service tier of the instance.
        "locationId": "A String", # Optional. The zone where the instance will be provisioned. If not provided,
            # the service will choose a zone for the instance. For STANDARD_HA tier,
            # instances will be created across two zones for protection against zonal
            # failures. If [alternative_location_id] is also provided, it must be
            # different from [location_id].
        "port": 42, # Output only. The port number of the exposed Redis endpoint.
        "statusMessage": "A String", # Output only. Additional information about the current status of this
            # instance, if available.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body, updateMask=None, x__xgafv=None)</code>
  <pre>Updates the metadata and configuration of a specific Redis instance.

Completed longrunning.Operation will contain the new instance object
in the response field. The returned operation is automatically deleted
after a few hours, so there is no need to call DeleteOperation.

Args:
  name: string, Required. Unique name of the resource in this scope including project and
location using the form:
    `projects/{project_id}/locations/{location_id}/instances/{instance_id}`

Note: Redis instances are managed and addressed at regional level so
location_id here refers to a GCP region; however, users may choose which
specific zone (or collection of zones for cross-zone instances) an instance
should be provisioned in. Refer to [location_id] and
[alternative_location_id] fields for more details. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A Google Cloud Redis instance.
  "labels": { # Resource labels to represent user provided metadata
    "a_key": "A String",
  },
  "displayName": "A String", # An arbitrary and optional user-provided name for the instance.
  "name": "A String", # Required. Unique name of the resource in this scope including project and
      # location using the form:
      #     `projects/{project_id}/locations/{location_id}/instances/{instance_id}`
      # 
      # Note: Redis instances are managed and addressed at regional level so
      # location_id here refers to a GCP region; however, users may choose which
      # specific zone (or collection of zones for cross-zone instances) an instance
      # should be provisioned in. Refer to [location_id] and
      # [alternative_location_id] fields for more details.
  "alternativeLocationId": "A String", # Optional. Only applicable to STANDARD_HA tier which protects the instance
      # against zonal failures by provisioning it across two zones. If provided, it
      # must be a different zone from the one provided in [location_id].
  "currentLocationId": "A String", # Output only. The current zone where the Redis endpoint is placed. For Basic
      # Tier instances, this will always be the same as the [location_id]
      # provided by the user at creation time. For Standard Tier instances,
      # this can be either [location_id] or [alternative_location_id] and can
      # change after a failover event.
  "reservedIpRange": "A String", # Optional. The CIDR range of internal addresses that are reserved for this
      # instance. If not provided, the service will choose an unused /29 block,
      # for example, 10.0.0.0/29 or 192.168.0.0/29. Ranges must be unique
      # and non-overlapping with existing subnets in an authorized network.
  "redisVersion": "A String", # Optional. The version of Redis software.
      # If not provided, latest supported version will be used. Updating the
      # version will perform an upgrade/downgrade to the new version. Currently,
      # the supported values are:
      # 
      #  *   `REDIS_4_0` for Redis 4.0 compatibility
      #  *   `REDIS_3_2` for Redis 3.2 compatibility (default)
  "state": "A String", # Output only. The current state of this instance.
  "createTime": "A String", # Output only. The time the instance was created.
  "memorySizeGb": 42, # Required. Redis memory size in GiB.
  "host": "A String", # Output only. Hostname or IP address of the exposed Redis endpoint used by
      # clients to connect to the service.
  "persistenceIamIdentity": "A String", # Output only. Cloud IAM identity used by import / export operations to
      # transfer data to/from Cloud Storage. Format is
      # "serviceAccount:<service_account_email>". The value may change over time
      # for a given instance so should be checked before each import/export
      # operation.
  "authorizedNetwork": "A String", # Optional. The full name of the Google Compute Engine
      # [network](/compute/docs/networks-and-firewalls#networks) to which the
      # instance is connected. If left unspecified, the `default` network
      # will be used.
  "redisConfigs": { # Optional. Redis configuration parameters, according to
      # http://redis.io/topics/config. Currently, the only supported parameters
      # are:
      # 
      #  Redis 3.2 and above:
      # 
      #  *   maxmemory-policy
      #  *   notify-keyspace-events
      # 
      #  Redis 4.0 and above:
      # 
      #  *   activedefrag
      #  *   lfu-log-factor
      #  *   lfu-decay-time
    "a_key": "A String",
  },
  "tier": "A String", # Required. The service tier of the instance.
  "locationId": "A String", # Optional. The zone where the instance will be provisioned. If not provided,
      # the service will choose a zone for the instance. For STANDARD_HA tier,
      # instances will be created across two zones for protection against zonal
      # failures. If [alternative_location_id] is also provided, it must be
      # different from [location_id].
  "port": 42, # Output only. The port number of the exposed Redis endpoint.
  "statusMessage": "A String", # Output only. Additional information about the current status of this
      # instance, if available.
}

  updateMask: string, Required. Mask of fields to update. At least one path must be supplied in
this field. The elements of the repeated paths field may only include these
fields from Instance:

 *   `displayName`
 *   `labels`
 *   `memorySizeGb`
 *   `redisConfig`
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "metadata": { # {
        #
        # `createTime`: The time the operation was created.
        #
        # `endTime`: The time the operation finished running.
        #
        # `target`: Server-defined resource path for the target of the operation.
        #
        # `verb`: Name of the verb executed by the operation.
        #
        # `statusDetail`: Human-readable status of the operation, if any.
        #
        # `cancelRequested`: Identifies whether the user has requested cancellation of the operation. Operations that have successfully been cancelled have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.
        #
        # `apiVersion`: API version used to start the operation.
        #
        # }
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
  }</pre>
</div>

</body></html>