diff --git a/redisson/src/main/java/org/redisson/RedissonBloomFilter.java b/redisson/src/main/java/org/redisson/RedissonBloomFilter.java index 6279c8c8c..7fe416ee3 100644 --- a/redisson/src/main/java/org/redisson/RedissonBloomFilter.java +++ b/redisson/src/main/java/org/redisson/RedissonBloomFilter.java @@ -43,6 +43,7 @@ import org.redisson.command.CommandBatchService; import org.redisson.misc.Hash; import java.math.BigDecimal; +import java.time.Instant; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -289,8 +290,8 @@ public class RedissonBloomFilter extends RedissonExpirable implements RBloomF } @Override - public RFuture expireAtAsync(long timestamp) { - return expireAtAsync(timestamp, getRawName(), configName); + protected RFuture expireAtAsync(long timestamp, String... keys) { + return super.expireAtAsync(timestamp, getRawName(), configName); } @Override diff --git a/redisson/src/main/java/org/redisson/RedissonBoundedBlockingQueue.java b/redisson/src/main/java/org/redisson/RedissonBoundedBlockingQueue.java index eb0552cff..aa3efd097 100644 --- a/redisson/src/main/java/org/redisson/RedissonBoundedBlockingQueue.java +++ b/redisson/src/main/java/org/redisson/RedissonBoundedBlockingQueue.java @@ -368,8 +368,8 @@ public class RedissonBoundedBlockingQueue extends RedissonQueue implements } @Override - public RFuture expireAtAsync(long timestamp) { - return expireAtAsync(timestamp, getRawName(), getSemaphoreName()); + protected RFuture expireAtAsync(long timestamp, String... keys) { + return super.expireAtAsync(timestamp, getRawName(), getSemaphoreName()); } @Override diff --git a/redisson/src/main/java/org/redisson/RedissonDelayedQueue.java b/redisson/src/main/java/org/redisson/RedissonDelayedQueue.java index 096a1b1e4..44f1bb4ad 100644 --- a/redisson/src/main/java/org/redisson/RedissonDelayedQueue.java +++ b/redisson/src/main/java/org/redisson/RedissonDelayedQueue.java @@ -440,8 +440,8 @@ public class RedissonDelayedQueue extends RedissonExpirable implements RDelay } @Override - public RFuture expireAtAsync(long timestamp) { - return expireAtAsync(timestamp, queueName, timeoutSetName); + protected RFuture expireAtAsync(long timestamp, String... keys) { + return super.expireAtAsync(timestamp, queueName, timeoutSetName); } @Override diff --git a/redisson/src/main/java/org/redisson/RedissonExpirable.java b/redisson/src/main/java/org/redisson/RedissonExpirable.java index 33b0f19b3..427657931 100644 --- a/redisson/src/main/java/org/redisson/RedissonExpirable.java +++ b/redisson/src/main/java/org/redisson/RedissonExpirable.java @@ -70,7 +70,7 @@ abstract class RedissonExpirable extends RedissonObject implements RExpirable { @Override public RFuture expireAsync(Instant instant) { - return commandExecutor.writeAsync(getRawName(), StringCodec.INSTANCE, RedisCommands.PEXPIREAT, getRawName(), instant.toEpochMilli()); + return expireAtAsync(instant.toEpochMilli(), getRawName()); } @Override diff --git a/redisson/src/main/java/org/redisson/RedissonFairLock.java b/redisson/src/main/java/org/redisson/RedissonFairLock.java index 2d719a25a..c4f9381be 100644 --- a/redisson/src/main/java/org/redisson/RedissonFairLock.java +++ b/redisson/src/main/java/org/redisson/RedissonFairLock.java @@ -297,8 +297,8 @@ public class RedissonFairLock extends RedissonLock implements RLock { } @Override - public RFuture expireAtAsync(long timestamp) { - return expireAtAsync(timestamp, getRawName(), threadsQueueName, timeoutSetName); + protected RFuture expireAtAsync(long timestamp, String... keys) { + return super.expireAtAsync(timestamp, getRawName(), threadsQueueName, timeoutSetName); } @Override diff --git a/redisson/src/main/java/org/redisson/RedissonIdGenerator.java b/redisson/src/main/java/org/redisson/RedissonIdGenerator.java index 60d2ce993..7c01d72e1 100644 --- a/redisson/src/main/java/org/redisson/RedissonIdGenerator.java +++ b/redisson/src/main/java/org/redisson/RedissonIdGenerator.java @@ -160,8 +160,8 @@ public class RedissonIdGenerator extends RedissonExpirable implements RIdGenerat } @Override - public RFuture expireAtAsync(long timestamp) { - return expireAtAsync(timestamp, getRawName(), getAllocationSizeName()); + protected RFuture expireAtAsync(long timestamp, String... keys) { + return super.expireAtAsync(timestamp, getRawName(), getAllocationSizeName()); } @Override diff --git a/redisson/src/main/java/org/redisson/RedissonListMultimap.java b/redisson/src/main/java/org/redisson/RedissonListMultimap.java index 10869e251..4037ec4ce 100644 --- a/redisson/src/main/java/org/redisson/RedissonListMultimap.java +++ b/redisson/src/main/java/org/redisson/RedissonListMultimap.java @@ -15,6 +15,7 @@ */ package org.redisson; +import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -239,7 +240,12 @@ public class RedissonListMultimap extends RedissonMultimap implement public RFuture expireAsync(long timeToLive, TimeUnit timeUnit) { throw new UnsupportedOperationException("This operation is not supported for SetMultimap values Set"); } - + + @Override + public RFuture expireAsync(Instant instant) { + throw new UnsupportedOperationException("This operation is not supported for SetMultimap values Set"); + } + @Override public RFuture expireAtAsync(long timestamp) { throw new UnsupportedOperationException("This operation is not supported for SetMultimap values Set"); diff --git a/redisson/src/main/java/org/redisson/RedissonListMultimapCache.java b/redisson/src/main/java/org/redisson/RedissonListMultimapCache.java index 050b80f04..5e801387e 100644 --- a/redisson/src/main/java/org/redisson/RedissonListMultimapCache.java +++ b/redisson/src/main/java/org/redisson/RedissonListMultimapCache.java @@ -15,6 +15,7 @@ */ package org.redisson; +import java.time.Instant; import java.util.Arrays; import java.util.Collection; import java.util.concurrent.TimeUnit; @@ -202,6 +203,11 @@ public class RedissonListMultimapCache extends RedissonListMultimap return baseCache.deleteAsync(); } + @Override + public RFuture expireAsync(Instant instant) { + return expireAtAsync(instant.toEpochMilli()); + } + @Override public RFuture expireAsync(long timeToLive, TimeUnit timeUnit) { return baseCache.expireAsync(timeToLive, timeUnit); diff --git a/redisson/src/main/java/org/redisson/RedissonListMultimapValues.java b/redisson/src/main/java/org/redisson/RedissonListMultimapValues.java index 6d346feee..e65658cce 100644 --- a/redisson/src/main/java/org/redisson/RedissonListMultimapValues.java +++ b/redisson/src/main/java/org/redisson/RedissonListMultimapValues.java @@ -15,6 +15,7 @@ */ package org.redisson; +import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -71,7 +72,12 @@ public class RedissonListMultimapValues extends RedissonExpirable implements public RFuture expireAsync(long timeToLive, TimeUnit timeUnit) { throw new UnsupportedOperationException("This operation is not supported for SetMultimap values Set"); } - + + @Override + public RFuture expireAsync(Instant instant) { + throw new UnsupportedOperationException("This operation is not supported for SetMultimap values Set"); + } + @Override public RFuture expireAtAsync(long timestamp) { throw new UnsupportedOperationException("This operation is not supported for SetMultimap values Set"); diff --git a/redisson/src/main/java/org/redisson/RedissonMapCache.java b/redisson/src/main/java/org/redisson/RedissonMapCache.java index d143605c2..c6ee2896d 100644 --- a/redisson/src/main/java/org/redisson/RedissonMapCache.java +++ b/redisson/src/main/java/org/redisson/RedissonMapCache.java @@ -2416,7 +2416,7 @@ public class RedissonMapCache extends RedissonMap implements RMapCac } @Override - public RFuture expireAtAsync(long timestamp) { + protected RFuture expireAtAsync(long timestamp, String... keys) { return commandExecutor.evalWriteAsync(getRawName(), LongCodec.INSTANCE, RedisCommands.EVAL_BOOLEAN, "local maxSize = tonumber(redis.call('hget', KEYS[5], 'max-size')); " + "if maxSize ~= nil and maxSize ~= 0 then " + diff --git a/redisson/src/main/java/org/redisson/RedissonMultimap.java b/redisson/src/main/java/org/redisson/RedissonMultimap.java index d9140d943..d5ea9900f 100644 --- a/redisson/src/main/java/org/redisson/RedissonMultimap.java +++ b/redisson/src/main/java/org/redisson/RedissonMultimap.java @@ -344,7 +344,7 @@ public abstract class RedissonMultimap extends RedissonExpirable implement } @Override - public RFuture expireAtAsync(long timestamp) { + protected RFuture expireAtAsync(long timestamp, String... keys) { return commandExecutor.evalWriteAsync(getRawName(), LongCodec.INSTANCE, RedisCommands.EVAL_BOOLEAN, "local entries = redis.call('hgetall', KEYS[1]); " + "for i, v in ipairs(entries) do " + diff --git a/redisson/src/main/java/org/redisson/RedissonPermitExpirableSemaphore.java b/redisson/src/main/java/org/redisson/RedissonPermitExpirableSemaphore.java index 574b9a49a..ced077be5 100644 --- a/redisson/src/main/java/org/redisson/RedissonPermitExpirableSemaphore.java +++ b/redisson/src/main/java/org/redisson/RedissonPermitExpirableSemaphore.java @@ -606,8 +606,8 @@ public class RedissonPermitExpirableSemaphore extends RedissonExpirable implemen } @Override - public RFuture expireAtAsync(long timestamp) { - return expireAtAsync(timestamp, getRawName(), timeoutName); + protected RFuture expireAtAsync(long timestamp, String... keys) { + return super.expireAtAsync(timestamp, getRawName(), timeoutName); } @Override diff --git a/redisson/src/main/java/org/redisson/RedissonPriorityQueue.java b/redisson/src/main/java/org/redisson/RedissonPriorityQueue.java index 38603cebb..5f80c2e43 100644 --- a/redisson/src/main/java/org/redisson/RedissonPriorityQueue.java +++ b/redisson/src/main/java/org/redisson/RedissonPriorityQueue.java @@ -429,8 +429,8 @@ public class RedissonPriorityQueue extends RedissonList implements RPriori } @Override - public RFuture expireAtAsync(long timestamp) { - return expireAtAsync(timestamp, getRawName(), getComparatorKeyName()); + protected RFuture expireAtAsync(long timestamp, String... keys) { + return super.expireAtAsync(timestamp, getRawName(), getComparatorKeyName()); } @Override diff --git a/redisson/src/main/java/org/redisson/RedissonRateLimiter.java b/redisson/src/main/java/org/redisson/RedissonRateLimiter.java index 7ba2fd86d..c057c7cc9 100644 --- a/redisson/src/main/java/org/redisson/RedissonRateLimiter.java +++ b/redisson/src/main/java/org/redisson/RedissonRateLimiter.java @@ -336,8 +336,8 @@ public class RedissonRateLimiter extends RedissonExpirable implements RRateLimit } @Override - public RFuture expireAtAsync(long timestamp) { - return expireAtAsync(timestamp, getRawName(), getValueName(), getClientValueName(), getPermitsName(), getClientPermitsName()); + protected RFuture expireAtAsync(long timestamp, String... keys) { + return super.expireAtAsync(timestamp, getRawName(), getValueName(), getClientValueName(), getPermitsName(), getClientPermitsName()); } @Override diff --git a/redisson/src/main/java/org/redisson/RedissonReliableTopic.java b/redisson/src/main/java/org/redisson/RedissonReliableTopic.java index b57caf209..5843b8ef7 100644 --- a/redisson/src/main/java/org/redisson/RedissonReliableTopic.java +++ b/redisson/src/main/java/org/redisson/RedissonReliableTopic.java @@ -282,8 +282,8 @@ public class RedissonReliableTopic extends RedissonExpirable implements RReliabl } @Override - public RFuture expireAtAsync(long timestamp) { - return expireAtAsync(timestamp, getRawName(), getSubscribersName(), getMapName(), getCounter(), getTimeout()); + protected RFuture expireAtAsync(long timestamp, String... keys) { + return super.expireAtAsync(timestamp, getRawName(), getSubscribersName(), getMapName(), getCounter(), getTimeout()); } @Override diff --git a/redisson/src/main/java/org/redisson/RedissonSetMultimap.java b/redisson/src/main/java/org/redisson/RedissonSetMultimap.java index 088790405..27d65317d 100644 --- a/redisson/src/main/java/org/redisson/RedissonSetMultimap.java +++ b/redisson/src/main/java/org/redisson/RedissonSetMultimap.java @@ -15,6 +15,7 @@ */ package org.redisson; +import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -218,7 +219,12 @@ public class RedissonSetMultimap extends RedissonMultimap implements public RFuture expireAsync(long timeToLive, TimeUnit timeUnit) { throw new UnsupportedOperationException("This operation is not supported for SetMultimap values Set"); } - + + @Override + public RFuture expireAsync(Instant instant) { + throw new UnsupportedOperationException("This operation is not supported for SetMultimap values Set"); + } + @Override public RFuture expireAtAsync(long timestamp) { throw new UnsupportedOperationException("This operation is not supported for SetMultimap values Set"); diff --git a/redisson/src/main/java/org/redisson/RedissonSetMultimapCache.java b/redisson/src/main/java/org/redisson/RedissonSetMultimapCache.java index 95df74f1d..d7144af34 100644 --- a/redisson/src/main/java/org/redisson/RedissonSetMultimapCache.java +++ b/redisson/src/main/java/org/redisson/RedissonSetMultimapCache.java @@ -15,6 +15,7 @@ */ package org.redisson; +import java.time.Instant; import java.util.Arrays; import java.util.Collection; import java.util.concurrent.TimeUnit; @@ -195,6 +196,11 @@ public class RedissonSetMultimapCache extends RedissonSetMultimap im return baseCache.deleteAsync(); } + @Override + public RFuture expireAsync(Instant instant) { + return expireAtAsync(instant.toEpochMilli()); + } + @Override public RFuture expireAsync(long timeToLive, TimeUnit timeUnit) { return baseCache.expireAsync(timeToLive, timeUnit); diff --git a/redisson/src/main/java/org/redisson/RedissonSetMultimapValues.java b/redisson/src/main/java/org/redisson/RedissonSetMultimapValues.java index 4628f5700..4eb9fb2b0 100644 --- a/redisson/src/main/java/org/redisson/RedissonSetMultimapValues.java +++ b/redisson/src/main/java/org/redisson/RedissonSetMultimapValues.java @@ -15,6 +15,7 @@ */ package org.redisson; +import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -88,7 +89,12 @@ public class RedissonSetMultimapValues extends RedissonExpirable implements R public RFuture clearExpireAsync() { throw new UnsupportedOperationException("This operation is not supported for SetMultimap values Set"); } - + + @Override + public RFuture expireAsync(Instant instant) { + throw new UnsupportedOperationException("This operation is not supported for SetMultimap values Set"); + } + @Override public RFuture expireAsync(long timeToLive, TimeUnit timeUnit) { throw new UnsupportedOperationException("This operation is not supported for SetMultimap values Set"); diff --git a/redisson/src/main/java/org/redisson/RedissonTimeSeries.java b/redisson/src/main/java/org/redisson/RedissonTimeSeries.java index 2f3aaafca..f0b8aa184 100644 --- a/redisson/src/main/java/org/redisson/RedissonTimeSeries.java +++ b/redisson/src/main/java/org/redisson/RedissonTimeSeries.java @@ -563,8 +563,8 @@ public class RedissonTimeSeries extends RedissonExpirable implements RTimeSer } @Override - public RFuture expireAtAsync(long timestamp) { - return expireAtAsync(timestamp, getRawName(), getTimeoutSetName()); + protected RFuture expireAtAsync(long timestamp, String... keys) { + return super.expireAtAsync(timestamp, getRawName(), getTimeoutSetName()); } @Override diff --git a/redisson/src/test/java/org/redisson/RedissonBloomFilterTest.java b/redisson/src/test/java/org/redisson/RedissonBloomFilterTest.java index 20bb2de55..557fa259c 100644 --- a/redisson/src/test/java/org/redisson/RedissonBloomFilterTest.java +++ b/redisson/src/test/java/org/redisson/RedissonBloomFilterTest.java @@ -4,6 +4,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.redisson.api.RBloomFilter; +import java.time.Instant; + import static org.assertj.core.api.Assertions.assertThat; public class RedissonBloomFilterTest extends BaseTest { @@ -63,6 +65,19 @@ public class RedissonBloomFilterTest extends BaseTest { } + @Test + public void testExpire() throws InterruptedException { + RBloomFilter filter = redisson.getBloomFilter("filter"); + filter.tryInit(55000000L, 0.03); + + filter.add("test"); + filter.expire(Instant.now().plusSeconds(2)); + + Thread.sleep(2100); + + assertThat(redisson.getKeys().count()).isZero(); + } + @Test public void testNotInitializedOnContains() { Assertions.assertThrows(IllegalStateException.class, () -> {