DATAREDIS-913 - Delete multiple keys through ReactiveRedisTemplate.delete(Publisher) and unlink(Publisher).

We now delete all keys that are emitted by the source publisher when invoking delete(Publisher) and unlink(Publisher). Both methods split incoming keys into chunks of 128 keys to keep a balance between latency and the issued command count.

Previously, delete(Publisher) and unlink(Publisher) only deleted the first key.

Original Pull Request: #379
This commit is contained in:
Mark Paluch
2018-12-13 11:23:22 +01:00
committed by Christoph Strobl
parent d248c0cd7c
commit 7ec4641cc1
3 changed files with 52 additions and 9 deletions

View File

@@ -18,6 +18,7 @@ package org.springframework.data.redis.core;
import static org.assertj.core.api.Assertions.*;
import static org.junit.Assume.*;
import org.springframework.data.redis.StringObjectFactory;
import reactor.core.publisher.Flux;
import reactor.test.StepVerifier;
@@ -217,6 +218,44 @@ public class ReactiveRedisTemplateIntegrationTests<K, V> {
StepVerifier.create(redisTemplate.hasKey(key1)).expectNext(false).verifyComplete();
StepVerifier.create(redisTemplate.hasKey(key2)).expectNext(false).verifyComplete();
}
@Test // DATAREDIS-913
public void unlinkManyPublisher() {
K key1 = keyFactory.instance();
K key2 = keyFactory.instance();
assumeTrue(key1 instanceof String && valueFactory instanceof StringObjectFactory);
StepVerifier.create(redisTemplate.opsForValue().set(key1, valueFactory.instance())).expectNext(true)
.verifyComplete();
StepVerifier.create(redisTemplate.opsForValue().set(key2, valueFactory.instance())).expectNext(true)
.verifyComplete();
StepVerifier.create(redisTemplate.unlink(redisTemplate.keys((K) "*"))).expectNext(2L).verifyComplete();
StepVerifier.create(redisTemplate.hasKey(key1)).expectNext(false).verifyComplete();
StepVerifier.create(redisTemplate.hasKey(key2)).expectNext(false).verifyComplete();
}
@Test // DATAREDIS-913
public void deleteManyPublisher() {
K key1 = keyFactory.instance();
K key2 = keyFactory.instance();
assumeTrue(key1 instanceof String && valueFactory instanceof StringObjectFactory);
StepVerifier.create(redisTemplate.opsForValue().set(key1, valueFactory.instance())).expectNext(true)
.verifyComplete();
StepVerifier.create(redisTemplate.opsForValue().set(key2, valueFactory.instance())).expectNext(true)
.verifyComplete();
StepVerifier.create(redisTemplate.delete(redisTemplate.keys((K) "*"))).expectNext(2L).verifyComplete();
StepVerifier.create(redisTemplate.hasKey(key1)).expectNext(false).verifyComplete();
StepVerifier.create(redisTemplate.hasKey(key2)).expectNext(false).verifyComplete();
}
@Test // DATAREDIS-683
@SuppressWarnings("unchecked")