Skip to content

Commit cf160e7

Browse files
committed
Add multiple reactive keys exist checker
1 parent 3ab09fb commit cf160e7

File tree

2 files changed

+39
-3
lines changed

2 files changed

+39
-3
lines changed

src/main/java/org/springframework/data/redis/connection/ReactiveKeyCommands.java

+14
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,20 @@ default Mono<Boolean> exists(ByteBuffer key) {
175175

176176
return exists(Mono.just(new KeyCommand(key))).next().map(BooleanResponse::getOutput);
177177
}
178+
/**
179+
* Determine if given all {@literal keys} exist.
180+
*
181+
* @param keys must not be {@literal null} or {@literal empty}.
182+
* @return {@link Mono} emitting {@literal true} if all keys exist.
183+
* @see <a href="https://redis.io/commands/exists">Redis Documentation: EXISTS</a>
184+
*/
185+
default Mono<Boolean> exists(List<ByteBuffer> keys) {
186+
187+
Assert.notNull(keys, "Keys must not be null");
188+
Assert.notEmpty(keys, "Keys must not be empty");
189+
190+
return exists(Flux.fromIterable(keys).map(KeyCommand::new)).all(BooleanResponse::getOutput);
191+
}
178192

179193
/**
180194
* Determine if given {@literal key} exists.

src/test/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveKeyCommandsIntegrationTests.java

+25-3
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,28 @@ void existsShouldReturnFalseForNonExistingKeys() {
6666
connection.keyCommands().exists(KEY_1_BBUFFER).as(StepVerifier::create).expectNext(false).verifyComplete();
6767
}
6868

69+
@ParameterizedRedisTest
70+
void existsShouldReturnTrueWhenKeysExist() {
71+
72+
nativeCommands.set(KEY_1, VALUE_1);
73+
nativeCommands.set(KEY_2, VALUE_2);
74+
75+
connection.keyCommands().exists(Arrays.asList(KEY_1_BBUFFER, KEY_2_BBUFFER)).as(StepVerifier::create)
76+
.expectNext(true)
77+
.verifyComplete();
78+
}
79+
80+
@ParameterizedRedisTest
81+
void existsShouldReturnFalseWhenKeysDoNotExist() {
82+
83+
nativeCommands.set(KEY_1, VALUE_1);
84+
85+
connection.keyCommands().exists(Arrays.asList(KEY_1_BBUFFER, KEY_2_BBUFFER)).as(StepVerifier::create)
86+
.expectNext(false) //
87+
.verifyComplete();
88+
}
89+
90+
6991
@ParameterizedRedisTest // DATAREDIS-525
7092
void typeShouldReturnTypeCorrectly() {
7193

@@ -164,7 +186,7 @@ void renameShouldAlterKeyNameCorrectly() {
164186
connection.keyCommands().rename(KEY_1_BBUFFER, KEY_2_BBUFFER).as(StepVerifier::create).expectNext(true)
165187
.verifyComplete();
166188
assertThat(nativeCommands.exists(KEY_2)).isEqualTo(1L);
167-
assertThat(nativeCommands.exists(KEY_1)).isEqualTo(0L);
189+
assertThat(nativeCommands.exists(KEY_1)).isZero();
168190
}
169191

170192
@ParameterizedRedisTest // DATAREDIS-525
@@ -183,7 +205,7 @@ void renameNXShouldAlterKeyNameCorrectly() {
183205
.verifyComplete();
184206

185207
assertThat(nativeCommands.exists(KEY_2)).isEqualTo(1L);
186-
assertThat(nativeCommands.exists(KEY_1)).isEqualTo(0L);
208+
assertThat(nativeCommands.exists(KEY_1)).isZero();
187209
}
188210

189211
@ParameterizedRedisTest // DATAREDIS-525
@@ -395,7 +417,7 @@ void shouldMoveToDatabase() {
395417
.expectNext(true) //
396418
.expectComplete() //
397419
.verify();
398-
assertThat(nativeCommands.exists(KEY_1)).isEqualTo(0L);
420+
assertThat(nativeCommands.exists(KEY_1)).isZero();
399421
}
400422

401423
@ParameterizedRedisTest // DATAREDIS-694

0 commit comments

Comments
 (0)