/// Adds an entry using the specified values to the given stream key. If key does not exist, a new key holding a stream is created. The command returns the ID of the newly created stream entry.
/// </summary>
/// <param name="key">The key of the stream.</param>
/// <param name="streamField">The field name for the stream entry.</param>
/// <param name="streamValue">The value to set in the stream entry.</param>
/// <param name="messageId">The ID to assign to the stream entry, defaults to an auto-generated ID ("*").</param>
/// <param name="maxLength">The maximum length of the stream.</param>
/// <param name="useApproximateMaxLength">If true, the "~" argument is used to allow the stream to exceed max length by a small number. This improves performance when removing messages.</param>
/// <param name="flags">The flags to use for this operation.</param>
/// <returns>The ID of the newly created message.</returns>
/// Adds an entry using the specified values to the given stream key. If key does not exist, a new key holding a stream is created. The command returns the ID of the newly created stream entry.
/// </summary>
/// <param name="key">The key of the stream.</param>
/// <param name="streamPairs">The fields and their associated values to set in the stream entry.</param>
/// <param name="messageId">The ID to assign to the stream entry, defaults to an auto-generated ID ("*").</param>
/// <param name="maxLength">The maximum length of the stream.</param>
/// <param name="useApproximateMaxLength">If true, the "~" argument is used to allow the stream to exceed max length by a small number. This improves performance when removing messages.</param>
/// <param name="flags">The flags to use for this operation.</param>
/// <returns>The ID of the newly created message.</returns>
/// Change ownership of messages consumed, but not yet acknowledged, by a different consumer. This method returns the complete message for the claimed message(s).
/// </summary>
/// <param name="key">The key of the stream.</param>
/// <param name="key">The key of the stream.</param>
/// <param name="groupName">The name of the group to create.</param>
/// <param name="readFrom">The beginning position in the stream from which to read. If null, the method will send the option ("$") to only read new messages.</param>
/// <param name="flags">The flags to use for this operation.</param>
/// <returns>True if the group was created.</returns>
/// View information about pending messages for a stream. A pending message is a message read using StreamReadGroup (XREADGROUP) but not yet acknowledged.
/// </summary>
/// <param name="key">The key of the stream.</param>
/// <param name="groupName">The name of the consumer group</param>
/// <param name="flags">The flags to use for this operation.</param>
/// <returns>An instance of <see cref="StreamPendingInfo"/>. <see cref="StreamPendingInfo"/> contains the number of pending messages, the highest and lowest ID of the pending messages, and the consumers with their pending message count.</returns>
/// <remarks>The equivalent of calling XPENDING key group.</remarks>
/// <param name="key">The key of the stream.</param>
/// <param name="groupName">The name of the consumer group.</param>
/// <param name="count">The maximum number of pending messages to return.</param>
/// <param name="consumerName">The consumer name for the pending messages. Pass RedisValue.Null to include pending messages for all consumers.</param>
/// <param name="minId">The minimum ID from which to read the stream of pending messages. The method will default to reading from the beginning of the stream.</param>
/// <param name="maxId">The maximum ID to read to within the stream of pending messages. The method will default to reading to the end of the stream.</param>
/// <param name="flags">The flags to use for this operation.</param>
/// <returns>An instance of <see cref="StreamPendingMessageInfo"/> for each pending message.</returns>
/// <remarks>Equivalent of calling XPENDING key group start-id end-id count consumer-name.</remarks>
/// <param name="key">The key of the stream.</param>
/// <param name="minId">The minimum ID from which to read the stream. The method will default to reading from the beginning of the stream.</param>
/// <param name="maxId">The maximum ID to read to within the stream. The method will default to reading to the end of the stream.</param>
/// <param name="count">The maximum number of messages to return.</param>
/// <param name="messageOrder">The order of the messages. <see cref="Order.Ascending"/> will execute XRANGE and <see cref="Order.Descending"/> wil execute XREVRANGE.</param>
/// <param name="flags">The flags to use for this operation.</param>
/// <returns>Returns an instance of <see cref="RedisStreamEntry"/> for each message returned.</returns>
/// <param name="readFromId">The ID from within the stream to begin reading. If null, the method will send the option (">") to only read new, previously undelivered messages.</param>
/// <param name="count">The maximum number of messages to return.</param>
/// <param name="flags">The flags to use for this operation.</param>
/// <returns>Returns an instance of <see cref="RedisStreamEntry"/> for each message returned.</returns>
/// Trim the stream to a specified maximum length.
/// </summary>
/// <param name="key">The key of the stream.</param>
/// <param name="maxLength">The maximum length of the stream.</param>
/// <param name="useApproximateMaxLength">If true, the "~" argument is used to allow the stream to exceed max length by a small number. This improves performance when removing messages.</param>
/// <param name="flags">The flags to use for this operation.</param>
/// <returns>The number of messages removed from the stream.</returns>
/// If key already exists and is a string, this command appends the value at the end of the string. If key does not exist it is created and set as an empty string,
/// If key already exists and is a string, this command appends the value at the end of the string. If key does not exist it is created and set as an empty string,
/// so APPEND will be similar to SET in this special case.
/// so APPEND will be similar to SET in this special case.
/// Adds an entry using the specified values to the given stream key. If key does not exist, a new key holding a stream is created. The command returns the ID of the newly created stream entry.
/// </summary>
/// <param name="key">The key of the stream.</param>
/// <param name="streamField">The field name for the stream entry.</param>
/// <param name="streamValue">The value to set in the stream entry.</param>
/// <param name="messageId">The ID to assign to the stream entry, defaults to an auto-generated ID ("*").</param>
/// <param name="maxLength">The maximum length of the stream.</param>
/// <param name="useApproximateMaxLength">If true, the "~" argument is used to allow the stream to exceed max length by a small number. This improves performance when removing messages.</param>
/// <param name="flags">The flags to use for this operation.</param>
/// <returns>The ID of the newly created message.</returns>
/// Adds an entry using the specified values to the given stream key. If key does not exist, a new key holding a stream is created. The command returns the ID of the newly created stream entry.
/// </summary>
/// <param name="key">The key of the stream.</param>
/// <param name="streamPairs">The fields and their associated values to set in the stream entry.</param>
/// <param name="messageId">The ID to assign to the stream entry, defaults to an auto-generated ID ("*").</param>
/// <param name="maxLength">The maximum length of the stream.</param>
/// <param name="useApproximateMaxLength">If true, the "~" argument is used to allow the stream to exceed max length by a small number. This improves performance when removing messages.</param>
/// <param name="flags">The flags to use for this operation.</param>
/// <returns>The ID of the newly created message.</returns>
/// Change ownership of messages consumed, but not yet acknowledged, by a different consumer. This method returns the complete message for the claimed message(s).
/// </summary>
/// <param name="key">The key of the stream.</param>
/// <param name="key">The key of the stream.</param>
/// <param name="groupName">The name of the group to create.</param>
/// <param name="readFrom">The beginning position in the stream from which to read. If null, the method will send the option ("$") to only read new messages.</param>
/// <param name="flags">The flags to use for this operation.</param>
/// <returns>True if the group was created.</returns>
/// View information about pending messages for a stream. A pending message is a message read using StreamReadGroup (XREADGROUP) but not yet acknowledged.
/// </summary>
/// <param name="key">The key of the stream.</param>
/// <param name="groupName">The name of the consumer group</param>
/// <param name="flags">The flags to use for this operation.</param>
/// <returns>An instance of <see cref="StreamPendingInfo"/>. <see cref="StreamPendingInfo"/> contains the number of pending messages, the highest and lowest ID of the pending messages, and the consumers with their pending message count.</returns>
/// <remarks>The equivalent of calling XPENDING key group.</remarks>
/// <param name="key">The key of the stream.</param>
/// <param name="groupName">The name of the consumer group.</param>
/// <param name="count">The maximum number of pending messages to return.</param>
/// <param name="consumerName">The consumer name for the pending messages. Pass RedisValue.Null to include pending messages for all consumers.</param>
/// <param name="minId">The minimum ID from which to read the stream of pending messages. The method will default to reading from the beginning of the stream.</param>
/// <param name="maxId">The maximum ID to read to within the stream of pending messages. The method will default to reading to the end of the stream.</param>
/// <param name="flags">The flags to use for this operation.</param>
/// <returns>An instance of <see cref="StreamPendingMessageInfo"/> for each pending message.</returns>
/// <remarks>Equivalent of calling XPENDING key group start-id end-id count consumer-name.</remarks>
/// <param name="key">The key of the stream.</param>
/// <param name="minId">The minimum ID from which to read the stream. The method will default to reading from the beginning of the stream.</param>
/// <param name="maxId">The maximum ID to read to within the stream. The method will default to reading to the end of the stream.</param>
/// <param name="count">The maximum number of messages to return.</param>
/// <param name="messageOrder">The order of the messages. <see cref="Order.Ascending"/> will execute XRANGE and <see cref="Order.Descending"/> wil execute XREVRANGE.</param>
/// <param name="flags">The flags to use for this operation.</param>
/// <returns>Returns an instance of <see cref="RedisStreamEntry"/> for each message returned.</returns>
/// <param name="readFromId">The ID from within the stream to begin reading. If null, the method will send the option (">") to only read new, previously undelivered messages.</param>
/// <param name="count">The maximum number of messages to return.</param>
/// <param name="flags">The flags to use for this operation.</param>
/// <returns>Returns an instance of <see cref="RedisStreamEntry"/> for each message returned.</returns>
/// Trim the stream to a specified maximum length.
/// </summary>
/// <param name="key">The key of the stream.</param>
/// <param name="maxLength">The maximum length of the stream.</param>
/// <param name="useApproximateMaxLength">If true, the "~" argument is used to allow the stream to exceed max length by a small number. This improves performance when removing messages.</param>
/// <param name="flags">The flags to use for this operation.</param>
/// <returns>The number of messages removed from the stream.</returns>
/// If key already exists and is a string, this command appends the value at the end of the string. If key does not exist it is created and set as an empty string,
/// If key already exists and is a string, this command appends the value at the end of the string. If key does not exist it is created and set as an empty string,
/// so APPEND will be similar to SET in this special case.
/// so APPEND will be similar to SET in this special case.