Fixed - missed destroy method for RListMultimapCache and RSetMultimapCache objects. #6111

pull/6120/head
Nikita Koksharov 6 months ago
parent 84a2359693
commit 41a5780856

@ -37,21 +37,15 @@ import java.util.concurrent.TimeUnit;
public class RedissonListMultimapCache<K, V> extends RedissonListMultimap<K, V> implements RListMultimapCache<K, V> {
private final RedissonMultimapCache<K> baseCache;
public RedissonListMultimapCache(EvictionScheduler evictionScheduler, CommandAsyncExecutor connectionManager, String name) {
super(connectionManager, name);
if (evictionScheduler != null) {
evictionScheduler.scheduleCleanMultimap(name, getTimeoutSetName());
}
baseCache = new RedissonMultimapCache<K>(connectionManager, this, getTimeoutSetName(), prefix);
baseCache = new RedissonMultimapCache<>(connectionManager, evictionScheduler, this, getTimeoutSetName(), prefix);
}
public RedissonListMultimapCache(EvictionScheduler evictionScheduler, Codec codec, CommandAsyncExecutor connectionManager, String name) {
super(codec, connectionManager, name);
if (evictionScheduler != null) {
evictionScheduler.scheduleCleanMultimap(name, getTimeoutSetName());
}
baseCache = new RedissonMultimapCache<K>(connectionManager, this, getTimeoutSetName(), prefix);
baseCache = new RedissonMultimapCache<>(connectionManager, evictionScheduler, this, getTimeoutSetName(), prefix);
}
@Override
@ -75,7 +69,7 @@ public class RedissonListMultimapCache<K, V> extends RedissonListMultimap<K, V>
+ "return redis.call('llen', ARGV[3]) > 0 and 1 or 0;" +
"end;" +
"return 0; ",
Arrays.<Object>asList(getRawName(), getTimeoutSetName()), System.currentTimeMillis(), keyState, valuesName);
Arrays.asList(getRawName(), getTimeoutSetName()), System.currentTimeMillis(), keyState, valuesName);
}
String getTimeoutSetName() {
@ -109,7 +103,7 @@ public class RedissonListMultimapCache<K, V> extends RedissonListMultimap<K, V>
"end;" +
"end; " +
"return 0; ",
Arrays.<Object>asList(getRawName(), getTimeoutSetName()),
Arrays.asList(getRawName(), getTimeoutSetName()),
valueState, System.currentTimeMillis(), prefix);
}
@ -135,7 +129,7 @@ public class RedissonListMultimapCache<K, V> extends RedissonListMultimap<K, V>
"end; " +
"end; " +
"return 0; ",
Arrays.<Object>asList(valuesName, getTimeoutSetName()),
Arrays.asList(valuesName, getTimeoutSetName()),
System.currentTimeMillis(), keyState, valueState);
}
@ -144,7 +138,7 @@ public class RedissonListMultimapCache<K, V> extends RedissonListMultimap<K, V>
String keyHash = keyHash(key);
String valuesName = getValuesName(keyHash);
return new RedissonListMultimapValues<V>(codec, commandExecutor, valuesName, getTimeoutSetName(), key);
return new RedissonListMultimapValues<>(codec, commandExecutor, valuesName, getTimeoutSetName(), key);
}
@Override
@ -163,7 +157,7 @@ public class RedissonListMultimapCache<K, V> extends RedissonListMultimap<K, V>
"return redis.call('lrange', KEYS[1], 0, -1); " +
"end; " +
"return {}; ",
Arrays.<Object>asList(valuesName, getTimeoutSetName()), System.currentTimeMillis(), keyState);
Arrays.asList(valuesName, getTimeoutSetName()), System.currentTimeMillis(), keyState);
}
@Override
@ -178,7 +172,7 @@ public class RedissonListMultimapCache<K, V> extends RedissonListMultimap<K, V>
"redis.call('del', KEYS[2]); " +
"redis.call('zrem', KEYS[3], ARGV[1]); " +
"return members; ",
Arrays.<Object>asList(getRawName(), valuesName, getTimeoutSetName()), keyState);
Arrays.asList(getRawName(), valuesName, getTimeoutSetName()), keyState);
}
@Override
@ -215,5 +209,9 @@ public class RedissonListMultimapCache<K, V> extends RedissonListMultimap<K, V>
public RFuture<Boolean> clearExpireAsync() {
return baseCache.clearExpireAsync();
}
@Override
public void destroy() {
baseCache.destroy();
}
}

@ -24,6 +24,7 @@ import org.redisson.api.RObject;
import org.redisson.client.codec.LongCodec;
import org.redisson.client.protocol.RedisCommands;
import org.redisson.command.CommandAsyncExecutor;
import org.redisson.eviction.EvictionScheduler;
/**
*
@ -31,18 +32,24 @@ import org.redisson.command.CommandAsyncExecutor;
*
* @param <K> key type
*/
public class RedissonMultimapCache<K> {
class RedissonMultimapCache<K> {
private final CommandAsyncExecutor commandExecutor;
private final RObject object;
private final String timeoutSetName;
private final String prefix;
private final EvictionScheduler evictionScheduler;
public RedissonMultimapCache(CommandAsyncExecutor commandExecutor, RObject object, String timeoutSetName, String prefix) {
RedissonMultimapCache(CommandAsyncExecutor commandExecutor, EvictionScheduler evictionScheduler,
RObject object, String timeoutSetName, String prefix) {
this.commandExecutor = commandExecutor;
this.object = object;
this.timeoutSetName = timeoutSetName;
this.prefix = prefix;
this.evictionScheduler = evictionScheduler;
if (evictionScheduler != null) {
evictionScheduler.scheduleCleanMultimap(((RedissonObject) object).getRawName(), timeoutSetName);
}
}
public RFuture<Boolean> expireKeyAsync(K key, long timeToLive, TimeUnit timeUnit) {
@ -152,5 +159,11 @@ public class RedissonMultimapCache<K> {
prefix);
}
public void destroy() {
if (evictionScheduler != null) {
evictionScheduler.remove(((RedissonObject) object).getRawName());
}
((RedissonObject) object).removeListeners();
}
}

@ -40,10 +40,7 @@ public class RedissonSetMultimapCache<K, V> extends RedissonSetMultimap<K, V> im
public RedissonSetMultimapCache(EvictionScheduler evictionScheduler, CommandAsyncExecutor connectionManager, String name) {
super(connectionManager, name);
if (evictionScheduler != null) {
evictionScheduler.scheduleCleanMultimap(name, getTimeoutSetName());
}
baseCache = new RedissonMultimapCache<K>(connectionManager, this, getTimeoutSetName(), prefix);
baseCache = new RedissonMultimapCache<>(connectionManager, evictionScheduler, this, getTimeoutSetName(), prefix);
}
public RedissonSetMultimapCache(EvictionScheduler evictionScheduler, Codec codec, CommandAsyncExecutor connectionManager, String name) {
@ -51,7 +48,7 @@ public class RedissonSetMultimapCache<K, V> extends RedissonSetMultimap<K, V> im
if (evictionScheduler != null) {
evictionScheduler.scheduleCleanMultimap(name, getTimeoutSetName());
}
baseCache = new RedissonMultimapCache<K>(connectionManager, this, getTimeoutSetName(), prefix);
baseCache = new RedissonMultimapCache<>(connectionManager, evictionScheduler, this, getTimeoutSetName(), prefix);
}
@Override
@ -75,7 +72,7 @@ public class RedissonSetMultimapCache<K, V> extends RedissonSetMultimap<K, V> im
+ "return redis.call('scard', ARGV[3]) > 0 and 1 or 0;" +
"end;" +
"return 0; ",
Arrays.<Object>asList(getRawName(), getTimeoutSetName()),
Arrays.asList(getRawName(), getTimeoutSetName()),
System.currentTimeMillis(), keyState, setName);
}
@ -106,7 +103,7 @@ public class RedissonSetMultimapCache<K, V> extends RedissonSetMultimap<K, V> im
"end;" +
"end; " +
"return 0; ",
Arrays.<Object>asList(getRawName(), getTimeoutSetName()),
Arrays.asList(getRawName(), getTimeoutSetName()),
valueState, System.currentTimeMillis(), prefix);
}
@ -129,7 +126,8 @@ public class RedissonSetMultimapCache<K, V> extends RedissonSetMultimap<K, V> im
"end;" +
"end; " +
"return 0; ",
Arrays.<Object>asList(setName, getTimeoutSetName()), System.currentTimeMillis(), keyState, valueState);
Arrays.asList(setName, getTimeoutSetName()),
System.currentTimeMillis(), keyState, valueState);
}
@Override
@ -137,7 +135,7 @@ public class RedissonSetMultimapCache<K, V> extends RedissonSetMultimap<K, V> im
String keyHash = keyHash(key);
String setName = getValuesName(keyHash);
return new RedissonSetMultimapValues<V>(codec, commandExecutor, setName, getTimeoutSetName(), key);
return new RedissonSetMultimapValues<>(codec, commandExecutor, setName, getTimeoutSetName(), key);
}
@Override
@ -156,7 +154,7 @@ public class RedissonSetMultimapCache<K, V> extends RedissonSetMultimap<K, V> im
"return redis.call('smembers', KEYS[1]); " +
"end; " +
"return {}; ",
Arrays.<Object>asList(setName, getTimeoutSetName()), System.currentTimeMillis(), keyState);
Arrays.asList(setName, getTimeoutSetName()), System.currentTimeMillis(), keyState);
}
@Override
@ -171,7 +169,7 @@ public class RedissonSetMultimapCache<K, V> extends RedissonSetMultimap<K, V> im
"redis.call('del', KEYS[2]); " +
"redis.call('zrem', KEYS[3], ARGV[1]); " +
"return members; ",
Arrays.<Object>asList(getRawName(), setName, getTimeoutSetName()), keyState);
Arrays.asList(getRawName(), setName, getTimeoutSetName()), keyState);
}
@Override
@ -208,5 +206,10 @@ public class RedissonSetMultimapCache<K, V> extends RedissonSetMultimap<K, V> im
public RFuture<Boolean> clearExpireAsync() {
return baseCache.clearExpireAsync();
}
@Override
public void destroy() {
baseCache.destroy();
}
}

@ -25,7 +25,7 @@ import java.util.concurrent.TimeUnit;
* @param <K> key type
* @param <V> value type
*/
public interface RMultimapCache<K, V> extends RMultimap<K, V>, RMultimapCacheAsync<K, V> {
public interface RMultimapCache<K, V> extends RMultimap<K, V>, RMultimapCacheAsync<K, V>, RDestroyable {
/**
* Set a timeout for key. After the timeout has expired,

Loading…
Cancel
Save