true
+ * second element is a flattened series of String
pairs, where the value is at
+ * even indices and the score is at odd indices. If {@link ZScanOptionsBinaryBuilder#noScores}
+ * is to true
*
, the second element will only contain the members without scores.
* @example
* {@code
diff --git a/java/client/src/main/java/glide/api/models/BaseTransaction.java b/java/client/src/main/java/glide/api/models/BaseTransaction.java
index 6ccab2c274..ecbb9fac70 100644
--- a/java/client/src/main/java/glide/api/models/BaseTransaction.java
+++ b/java/client/src/main/java/glide/api/models/BaseTransaction.java
@@ -282,8 +282,10 @@
import glide.api.models.commands.geospatial.GeoUnit;
import glide.api.models.commands.geospatial.GeospatialData;
import glide.api.models.commands.scan.HScanOptions;
+import glide.api.models.commands.scan.HScanOptions.HScanOptionsBuilder;
import glide.api.models.commands.scan.SScanOptions;
import glide.api.models.commands.scan.ZScanOptions;
+import glide.api.models.commands.scan.ZScanOptions.ZScanOptionsBuilder;
import glide.api.models.commands.stream.StreamAddOptions;
import glide.api.models.commands.stream.StreamAddOptions.StreamAddOptionsBuilder;
import glide.api.models.commands.stream.StreamClaimOptions;
@@ -7054,10 +7056,10 @@ public T zscan(@NonNull ArgType key, @NonNull ArgType cursor) {
* always the cursor
for the next iteration of results. "0"
will be
* the cursor
returned on the last iteration of the sorted set. The second
* element is always an Array
of the subset of the sorted set held in key
- *
. The array in the second element is always a flattened series of String
+ *
. The array in the second element is a flattened series of String
*
pairs, where the value is at even indices and the score is at odd indices. If
- * options.noScores is to true
, the second element will only contain the members
- * without scores.
+ * {@link ZScanOptionsBuilder#noScores} is to true
, the second element will only
+ * contain the members without scores.
*/
public T zscan(
@NonNull ArgType key, @NonNull ArgType cursor, @NonNull ZScanOptions zScanOptions) {
@@ -7103,9 +7105,10 @@ public T hscan(@NonNull ArgType key, @NonNull ArgType cursor) {
* always the cursor
for the next iteration of results. "0"
will be
* the cursor
returned on the last iteration of the result. The second element is
* always an Array
of the subset of the hash held in key
. The array
- * in the second element is always a flattened series of String
pairs, where the
- * key is at even indices and the value is at odd indices. If options.noValues is set to
- * true
, the second element will only contain the fields without the values.
+ * in the second element is a flattened series of String
pairs, where the key is
+ * at even indices and the value is at odd indices. If {@link HScanOptionsBuilder#noValues} is
+ * set to true
, the second element will only contain the fields without the
+ * values.
*/
public T hscan(
@NonNull ArgType key, @NonNull ArgType cursor, @NonNull HScanOptions hScanOptions) {
diff --git a/java/client/src/main/java/glide/api/models/commands/scan/HScanOptions.java b/java/client/src/main/java/glide/api/models/commands/scan/HScanOptions.java
index 38ac80136a..d96a2f13b4 100644
--- a/java/client/src/main/java/glide/api/models/commands/scan/HScanOptions.java
+++ b/java/client/src/main/java/glide/api/models/commands/scan/HScanOptions.java
@@ -3,10 +3,11 @@
import glide.api.commands.HashBaseCommands;
import glide.api.models.GlideString;
+import glide.api.models.commands.scan.BaseScanOptions.BaseScanOptionsBuilder;
import glide.utils.ArgsBuilder;
import java.util.Arrays;
-import java.util.Objects;
import lombok.Builder;
+import lombok.EqualsAndHashCode;
import lombok.experimental.SuperBuilder;
/**
@@ -15,6 +16,7 @@
* @see valkey.io
*/
@SuperBuilder
+@EqualsAndHashCode(callSuper = false)
public class HScanOptions extends BaseScanOptions {
/** Option string to include in the HSCAN command when values are not included. */
@@ -22,7 +24,7 @@ public class HScanOptions extends BaseScanOptions {
/**
* When set to true, the command will not include values in the results. This option is available
- * from Redis version 8.0.0 and above.
+ * from Valkey version 8.0.0 and above.
*/
@Builder.Default protected boolean noValues = false;
@@ -54,12 +56,16 @@ public GlideString[] toGlideStringArgs() {
return builder.toArray();
}
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof HScanOptions)) return false;
- if (!super.equals(o)) return false;
- HScanOptions that = (HScanOptions) o;
- return Objects.equals(noValues, that.noValues);
+ public abstract static class HScanOptionsBuilder<
+ C extends HScanOptions, B extends HScanOptionsBuilder>
+ extends BaseScanOptionsBuilder {
+
+ protected boolean noValues = false;
+
+ /** Option string to include in the HSCAN command when values are not included. */
+ public B noValues() {
+ this.noValues = true;
+ return self();
+ }
}
}
diff --git a/java/client/src/main/java/glide/api/models/commands/scan/HScanOptionsBinary.java b/java/client/src/main/java/glide/api/models/commands/scan/HScanOptionsBinary.java
index 5bd9b4b7d2..9a38bd0517 100644
--- a/java/client/src/main/java/glide/api/models/commands/scan/HScanOptionsBinary.java
+++ b/java/client/src/main/java/glide/api/models/commands/scan/HScanOptionsBinary.java
@@ -5,9 +5,9 @@
import glide.api.commands.HashBaseCommands;
import glide.api.models.GlideString;
+import glide.api.models.commands.scan.BaseScanOptionsBinary.BaseScanOptionsBinaryBuilder;
import glide.utils.ArgsBuilder;
import java.util.Arrays;
-import java.util.Objects;
import lombok.Builder;
import lombok.experimental.SuperBuilder;
@@ -24,7 +24,7 @@ public class HScanOptionsBinary extends BaseScanOptionsBinary {
/**
* When set to true, the command will not include values in the results. This option is available
- * from Redis version 8.0.0 and above.
+ * from Valkey version 8.0.0 and above.
*/
@Builder.Default protected boolean noValues = false;
@@ -51,12 +51,16 @@ public String[] toArgs() {
return Arrays.stream(builder.toArray()).map(GlideString::getString).toArray(String[]::new);
}
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof ZScanOptionsBinary)) return false;
- if (!super.equals(o)) return false;
- HScanOptionsBinary that = (HScanOptionsBinary) o;
- return Objects.equals(noValues, that.noValues);
+ public abstract static class HScanOptionsBinaryBuilder<
+ C extends HScanOptionsBinary, B extends HScanOptionsBinaryBuilder>
+ extends BaseScanOptionsBinaryBuilder {
+
+ protected boolean noValues = false;
+
+ /** Option string to include in the HSCAN command when values are not included. */
+ public B noValues() {
+ this.noValues = true;
+ return self();
+ }
}
}
diff --git a/java/client/src/main/java/glide/api/models/commands/scan/ZScanOptions.java b/java/client/src/main/java/glide/api/models/commands/scan/ZScanOptions.java
index e50838808f..9e3f4113dd 100644
--- a/java/client/src/main/java/glide/api/models/commands/scan/ZScanOptions.java
+++ b/java/client/src/main/java/glide/api/models/commands/scan/ZScanOptions.java
@@ -3,10 +3,11 @@
import glide.api.commands.SortedSetBaseCommands;
import glide.api.models.GlideString;
+import glide.api.models.commands.scan.BaseScanOptions.BaseScanOptionsBuilder;
import glide.utils.ArgsBuilder;
import java.util.Arrays;
-import java.util.Objects;
import lombok.Builder;
+import lombok.EqualsAndHashCode;
import lombok.experimental.SuperBuilder;
/**
@@ -15,6 +16,7 @@
* @see valkey.io
*/
@SuperBuilder
+@EqualsAndHashCode(callSuper = false)
public class ZScanOptions extends BaseScanOptions {
/** Option string to include in the ZSCAN command when scores are not included. */
@@ -22,7 +24,7 @@ public class ZScanOptions extends BaseScanOptions {
/**
* When set to true, the command will not include scores in the results. This option is available
- * from Redis version 8.0.0 and above.
+ * from Valkey version 8.0.0 and above.
*/
@Builder.Default protected boolean noScores = false;
@@ -54,12 +56,15 @@ public GlideString[] toGlideStringArgs() {
return builder.toArray();
}
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof ZScanOptions)) return false;
- if (!super.equals(o)) return false;
- ZScanOptions that = (ZScanOptions) o;
- return Objects.equals(noScores, that.noScores);
+ public abstract static class ZScanOptionsBuilder<
+ C extends ZScanOptions, B extends ZScanOptionsBuilder>
+ extends BaseScanOptionsBuilder {
+ protected boolean noScores = false;
+
+ /** Option string to include in the ZSCAN command when scores are not included. */
+ public B noScores() {
+ this.noScores = true;
+ return self();
+ }
}
}
diff --git a/java/client/src/main/java/glide/api/models/commands/scan/ZScanOptionsBinary.java b/java/client/src/main/java/glide/api/models/commands/scan/ZScanOptionsBinary.java
index 75020bc375..e9fd654710 100644
--- a/java/client/src/main/java/glide/api/models/commands/scan/ZScanOptionsBinary.java
+++ b/java/client/src/main/java/glide/api/models/commands/scan/ZScanOptionsBinary.java
@@ -5,10 +5,11 @@
import glide.api.commands.SortedSetBaseCommands;
import glide.api.models.GlideString;
+import glide.api.models.commands.scan.BaseScanOptionsBinary.BaseScanOptionsBinaryBuilder;
import glide.utils.ArgsBuilder;
import java.util.Arrays;
-import java.util.Objects;
import lombok.Builder;
+import lombok.EqualsAndHashCode;
import lombok.experimental.SuperBuilder;
/**
@@ -18,6 +19,7 @@
* @see valkey.io
*/
@SuperBuilder
+@EqualsAndHashCode(callSuper = false)
public class ZScanOptionsBinary extends BaseScanOptionsBinary {
/** Option string to include in the ZSCAN command when scores are not included. */
public static final GlideString NO_SCORES_API = gs("NOSCORES");
@@ -51,12 +53,15 @@ public String[] toArgs() {
return Arrays.stream(builder.toArray()).map(GlideString::getString).toArray(String[]::new);
}
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof ZScanOptionsBinary)) return false;
- if (!super.equals(o)) return false;
- ZScanOptionsBinary that = (ZScanOptionsBinary) o;
- return Objects.equals(noScores, that.noScores);
+ public abstract static class ZScanOptionsBinaryBuilder<
+ C extends ZScanOptionsBinary, B extends ZScanOptionsBinaryBuilder>
+ extends BaseScanOptionsBinaryBuilder {
+ protected boolean noScores = false;
+
+ /** Option string to include in the ZSCAN command when scores are not included. */
+ public B noScores() {
+ this.noScores = true;
+ return self();
+ }
}
}
diff --git a/java/integTest/src/test/java/glide/SharedCommandTests.java b/java/integTest/src/test/java/glide/SharedCommandTests.java
index 06be6cea3c..aadfc3cec8 100644
--- a/java/integTest/src/test/java/glide/SharedCommandTests.java
+++ b/java/integTest/src/test/java/glide/SharedCommandTests.java
@@ -14195,8 +14195,7 @@ public void zscan(BaseClient client) {
assertTrue(ArrayUtils.getLength(result[resultCollectionIndex]) >= 0);
if (SERVER_VERSION.isGreaterThanOrEqualTo("7.9.0")) {
- result =
- client.zscan(key1, initialCursor, ZScanOptions.builder().noScores(true).build()).get();
+ result = client.zscan(key1, initialCursor, ZScanOptions.builder().noScores().build()).get();
assertTrue(Long.parseLong(result[resultCursorIndex].toString()) >= 0);
// Cast the result collection to a String array
Object[] fieldsArray = (Object[]) result[resultCollectionIndex];
@@ -14403,9 +14402,7 @@ public void zscan_binary(BaseClient client) {
if (SERVER_VERSION.isGreaterThanOrEqualTo("7.9.0")) {
result =
- client
- .zscan(key1, initialCursor, ZScanOptionsBinary.builder().noScores(true).build())
- .get();
+ client.zscan(key1, initialCursor, ZScanOptionsBinary.builder().noScores().build()).get();
assertTrue(Long.parseLong(result[resultCursorIndex].toString()) >= 0);
// Cast the result collection to a String array
Object[] fieldsArray = (Object[]) result[resultCollectionIndex];
@@ -14589,8 +14586,7 @@ public void hscan(BaseClient client) {
assertTrue(ArrayUtils.getLength(result[resultCollectionIndex]) >= 0);
if (SERVER_VERSION.isGreaterThanOrEqualTo("7.9.0")) {
- result =
- client.hscan(key1, initialCursor, HScanOptions.builder().noValues(true).build()).get();
+ result = client.hscan(key1, initialCursor, HScanOptions.builder().noValues().build()).get();
assertTrue(Long.parseLong(result[resultCursorIndex].toString()) >= 0);
// Cast the result collection to a String array
Object[] fieldsArray = (Object[]) result[resultCollectionIndex];
@@ -14779,9 +14775,7 @@ public void hscan_binary(BaseClient client) {
if (SERVER_VERSION.isGreaterThanOrEqualTo("7.9.0")) {
result =
- client
- .hscan(key1, initialCursor, HScanOptionsBinary.builder().noValues(true).build())
- .get();
+ client.hscan(key1, initialCursor, HScanOptionsBinary.builder().noValues().build()).get();
assertTrue(Long.parseLong(result[resultCursorIndex].toString()) >= 0);
// Cast the result collection to a String array
Object[] fieldsArray = (Object[]) result[resultCollectionIndex];
diff --git a/java/integTest/src/test/java/glide/TransactionTestUtilities.java b/java/integTest/src/test/java/glide/TransactionTestUtilities.java
index 4e41fb2751..077a70ee10 100644
--- a/java/integTest/src/test/java/glide/TransactionTestUtilities.java
+++ b/java/integTest/src/test/java/glide/TransactionTestUtilities.java
@@ -383,9 +383,7 @@ private static Object[] hashCommands(BaseTransaction> transaction) {
.hscan(hashKey2, "0", HScanOptions.builder().count(20L).build());
if (SERVER_VERSION.isGreaterThanOrEqualTo("7.9.0")) {
- transaction
- .hscan(hashKey2, "0", HScanOptions.builder().count(20L).noValues(false).build())
- .hscan(hashKey2, "0", HScanOptions.builder().count(20L).noValues(true).build());
+ transaction.hscan(hashKey2, "0", HScanOptions.builder().count(20L).noValues().build());
}
var result =
@@ -422,10 +420,8 @@ private static Object[] hashCommands(BaseTransaction> transaction) {
concatenateArrays(
result,
new Object[] {
- new Object[] {"0", new Object[] {field1, value1}}, // hscan(hashKey2, "0",
- // HScanOptions.builder().count(20L).noValues(false).build());
new Object[] {"0", new Object[] {field1}}, // hscan(hashKey2, "0",
- // HScanOptions.builder().count(20L).noValues(true).build());
+ // HScanOptions.builder().count(20L).noValues().build());
});
}
@@ -671,9 +667,7 @@ private static Object[] sortedSetCommands(BaseTransaction> transaction) {
.zscan(zSetKey2, "0")
.zscan(zSetKey2, "0", ZScanOptions.builder().count(20L).build());
if (SERVER_VERSION.isGreaterThanOrEqualTo("7.9.0")) {
- transaction
- .zscan(zSetKey2, 0, ZScanOptions.builder().count(20L).noScores(false).build())
- .zscan(zSetKey2, 0, ZScanOptions.builder().count(20L).noScores(true).build());
+ transaction.zscan(zSetKey2, 0, ZScanOptions.builder().count(20L).noScores().build());
}
transaction.bzpopmin(new String[] {zSetKey2}, .1);
@@ -746,12 +740,9 @@ private static Object[] sortedSetCommands(BaseTransaction> transaction) {
concatenateArrays(
expectedResults,
new Object[] {
- new Object[] {
- "0", new String[] {"one", "1"}
- }, // zscan(zSetKey2, 0, ZScanOptions.builder().count(20L).noScores(false).build())
new Object[] {
"0", new String[] {"one"}
- }, // zscan(zSetKey2, 0, ZScanOptions.builder().count(20L).noScores(true).build())
+ }, // zscan(zSetKey2, 0, ZScanOptions.builder().count(20L).noScores().build())
});
}
diff --git a/node/npm/glide/index.ts b/node/npm/glide/index.ts
index 65840cf7a8..70458dfc8f 100644
--- a/node/npm/glide/index.ts
+++ b/node/npm/glide/index.ts
@@ -77,6 +77,8 @@ function initialize() {
const {
AggregationType,
BaseScanOptions,
+ ZScanOptions,
+ HScanOptions,
BitEncoding,
BitFieldGet,
BitFieldIncrBy,
@@ -185,6 +187,8 @@ function initialize() {
module.exports = {
AggregationType,
BaseScanOptions,
+ HScanOptions,
+ ZScanOptions,
BitEncoding,
BitFieldGet,
BitFieldIncrBy,
diff --git a/node/src/BaseClient.ts b/node/src/BaseClient.ts
index 019d2db556..8b394586a4 100644
--- a/node/src/BaseClient.ts
+++ b/node/src/BaseClient.ts
@@ -56,6 +56,7 @@ import {
StreamTrimOptions,
TimeUnit,
ZAddOptions,
+ ZScanOptions,
convertElementsAndScores,
createAppend,
createBLMPop,
@@ -2054,9 +2055,9 @@ export class BaseClient {
* @returns An array of the `cursor` and the subset of the hash held by `key`.
* The first element is always the `cursor` for the next iteration of results. `"0"` will be the `cursor`
* returned on the last iteration of the hash. The second element is always an array of the subset of the
- * hash held in `key`. The array in the second element is always a flattened series of string pairs,
+ * hash held in `key`. The array in the second element is a flattened series of string pairs,
* where the value is at even indices and the value is at odd indices.
- * If options.noValues is set to `true`, the second element will only contain the fields without the values.
+ * If `options.noValues` is set to `true`, the second element will only contain the fields without the values.
*
* @example
* ```typescript
@@ -6471,21 +6472,18 @@ export class BaseClient {
* @returns An `Array` of the `cursor` and the subset of the sorted set held by `key`.
* The first element is always the `cursor` for the next iteration of results. `0` will be the `cursor`
* returned on the last iteration of the sorted set. The second element is always an `Array` of the subset
- * of the sorted set held in `key`. The `Array` in the second element is always a flattened series of
+ * of the sorted set held in `key`. The `Array` in the second element is a flattened series of
* `string` pairs, where the value is at even indices and the score is at odd indices.
- * If options.noScores is to `true`, the second element will only contain the members without scores.
+ * If `options.noScores` is to `true`, the second element will only contain the members without scores.
*
* @example
* ```typescript
- * // Assume "key" contains a sorted set with multiple members
- * let newCursor = "0";
- * let result = [];
- *
+ * // Assume "key1" contains a sorted set with multiple members
+ * let cursor = "0";
* do {
* const result = await client.zscan(key1, cursor, {
* match: "*",
* count: 5,
- * noScores: true,
* });
* cursor = result[0];
* console.log("Cursor: ", cursor);
@@ -6493,11 +6491,36 @@ export class BaseClient {
* } while (cursor !== "0");
* // The output of the code above is something similar to:
* // Cursor: 123
+ * // Members: ['value 163', '163', 'value 114', '114', 'value 25', '25', 'value 82', '82', 'value 64', '64']
+ * // Cursor: 47
+ * // Members: ['value 39', '39', 'value 127', '127', 'value 43', '43', 'value 139', '139', 'value 211', '211']
+ * // Cursor: 0
+ * // Members: ['value 55', '55', 'value 24', '24', 'value 90', '90', 'value 113', '113']
+ * ```
+ *
+ * @example
+ * ```typescript
+ * // Zscan with no scores
+ * let newCursor = "0";
+ * let result = [];
+ *
+ * do {
+ * result = await client.zscan(key1, newCursor, {
+ * match: "*",
+ * count: 5,
+ * noScores: true,
+ * });
+ * newCursor = result[0];
+ * console.log("Cursor: ", newCursor);
+ * console.log("Members: ", result[1]);
+ * } while (newCursor !== "0");
+ * // The output of the code above is something similar to:
+ * // Cursor: 123
* // Members: ['value 163', 'value 114', 'value 25', 'value 82', 'value 64']
* // Cursor: 47
* // Members: ['value 39', 'value 127', 'value 43', 'value 139', 'value 211']
* // Cursor: 0
- * // Members: ['value 55', '55', 'value 24', '24', 'value 90', '90', 'value 113', '113']
+ * // Members: ['value 55', 'value 24' 'value 90', 'value 113']
* ```
*/
public async zscan(
diff --git a/node/src/Transaction.ts b/node/src/Transaction.ts
index 2f02f65b71..87d86f8db3 100644
--- a/node/src/Transaction.ts
+++ b/node/src/Transaction.ts
@@ -68,6 +68,7 @@ import {
StreamTrimOptions,
TimeUnit,
ZAddOptions,
+ ZScanOptions,
convertElementsAndScores,
createAppend,
createBLMPop,
@@ -1002,9 +1003,9 @@ export class BaseTransaction> {
* Command Response - An array of the `cursor` and the subset of the hash held by `key`.
* The first element is always the `cursor` for the next iteration of results. `"0"` will be the `cursor`
* returned on the last iteration of the hash. The second element is always an array of the subset of the
- * hash held in `key`. The array in the second element is always a flattened series of string pairs,
+ * hash held in `key`. The array in the second element is a flattened series of string pairs,
* where the value is at even indices and the value is at odd indices.
- * If options.noValues is set to `true`, the second element will only contain the fields without the values.
+ * If `options.noValues` is set to `true`, the second element will only contain the fields without the values.
*/
public hscan(key: string, cursor: string, options?: HScanOptions): T {
return this.addAndReturn(createHScan(key, cursor, options));
@@ -3682,9 +3683,9 @@ export class BaseTransaction> {
* Command Response - An `Array` of the `cursor` and the subset of the sorted set held by `key`.
* The first element is always the `cursor` for the next iteration of results. `0` will be the `cursor`
* returned on the last iteration of the sorted set. The second element is always an `Array` of the subset
- * of the sorted set held in `key`. The `Array` in the second element is always a flattened series of
+ * of the sorted set held in `key`. The `Array` in the second element is a flattened series of
* `String` pairs, where the value is at even indices and the score is at odd indices.
- * If options.noScores is to `true`, the second element will only contain the members without scores.
+ * If `options.noScores` is to `true`, the second element will only contain the members without scores.
*/
public zscan(key: GlideString, cursor: string, options?: ZScanOptions): T {
return this.addAndReturn(createZScan(key, cursor, options));
diff --git a/python/python/glide/async_commands/core.py b/python/python/glide/async_commands/core.py
index 87c2c9b593..ba8fd51f74 100644
--- a/python/python/glide/async_commands/core.py
+++ b/python/python/glide/async_commands/core.py
@@ -6142,7 +6142,7 @@ async def zscan(
List[Union[bytes, List[bytes]]]: An `Array` of the `cursor` and the subset of the sorted set held by `key`.
The first element is always the `cursor` for the next iteration of results. `0` will be the `cursor`
returned on the last iteration of the sorted set. The second element is always an `Array` of the subset
- of the sorted set held in `key`. The `Array` in the second element is always a flattened series of
+ of the sorted set held in `key`. The `Array` in the second element is a flattened series of
`String` pairs, where the value is at even indices and the score is at odd indices.
If `no_scores` is set to`True`, the second element will only contain the members without scores.
@@ -6225,7 +6225,7 @@ async def hscan(
List[Union[bytes, List[bytes]]]: An `Array` of the `cursor` and the subset of the hash held by `key`.
The first element is always the `cursor` for the next iteration of results. `0` will be the `cursor`
returned on the last iteration of the hash. The second element is always an `Array` of the subset of the
- hash held in `key`. The `Array` in the second element is always a flattened series of `String` pairs,
+ hash held in `key`. The `Array` in the second element is a flattened series of `String` pairs,
where the value is at even indices and the score is at odd indices.
If `no_values` is set to `True`, the second element will only contain the fields without the values.
diff --git a/python/python/glide/async_commands/transaction.py b/python/python/glide/async_commands/transaction.py
index 3906c17126..8201c482bc 100644
--- a/python/python/glide/async_commands/transaction.py
+++ b/python/python/glide/async_commands/transaction.py
@@ -4488,7 +4488,7 @@ def zscan(
List[Union[bytes, List[bytes]]]: An `Array` of the `cursor` and the subset of the sorted set held by `key`.
The first element is always the `cursor` for the next iteration of results. `0` will be the `cursor`
returned on the last iteration of the sorted set. The second element is always an `Array` of the subset
- of the sorted set held in `key`. The `Array` in the second element is always a flattened series of
+ of the sorted set held in `key`. The `Array` in the second element is a flattened series of
`String` pairs, where the value is at even indices and the score is at odd indices.
If `no_scores` is set to`True`, the second element will only contain the members without scores.
"""
@@ -4533,7 +4533,7 @@ def hscan(
List[Union[bytes, List[bytes]]]: An `Array` of the `cursor` and the subset of the hash held by `key`.
The first element is always the `cursor` for the next iteration of results. `0` will be the `cursor`
returned on the last iteration of the hash. The second element is always an `Array` of the subset of the
- hash held in `key`. The `Array` in the second element is always a flattened series of `String` pairs,
+ hash held in `key`. The `Array` in the second element is a flattened series of `String` pairs,
where the value is at even indices and the score is at odd indices.
If `no_values` is set to `True`, the second element will only contain the fields without the values.
"""