From 588669d62fad7cc351490d614053e8ec559c5765 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Mon, 21 Jun 2021 09:53:17 +0300 Subject: [PATCH] refactoring --- .../cache/BaseCacheConfiguration.java | 167 ++++++++++++++++++ .../cache/RedissonCacheConfiguration.java | 80 +-------- 2 files changed, 169 insertions(+), 78 deletions(-) create mode 100644 redisson-micronaut/src/main/java/org/redisson/micronaut/cache/BaseCacheConfiguration.java diff --git a/redisson-micronaut/src/main/java/org/redisson/micronaut/cache/BaseCacheConfiguration.java b/redisson-micronaut/src/main/java/org/redisson/micronaut/cache/BaseCacheConfiguration.java new file mode 100644 index 000000000..4509f12f8 --- /dev/null +++ b/redisson-micronaut/src/main/java/org/redisson/micronaut/cache/BaseCacheConfiguration.java @@ -0,0 +1,167 @@ +/** + * Copyright (c) 2013-2021 Nikita Koksharov + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.redisson.micronaut.cache; + +import edu.umd.cs.findbugs.annotations.NonNull; +import io.micronaut.core.naming.Named; +import org.redisson.api.MapOptions; +import org.redisson.api.map.MapLoader; +import org.redisson.api.map.MapWriter; +import org.redisson.client.codec.Codec; + +import java.time.Duration; + +/** + * Micronaut Cache settings. + * + * @author Nikita Koksharov + * + */ +public class BaseCacheConfiguration implements Named { + + MapOptions mapOptions = MapOptions.defaults(); + + private final String name; + + private Codec codec; + private Duration expireAfterWrite; + private Duration expireAfterAccess; + private int maxSize; + + public BaseCacheConfiguration(String name) { + this.name = name; + } + + @NonNull + @Override + public String getName() { + return name; + } + + public Codec getCodec() { + return codec; + } + + /** + * Redis data codec applied to cache entries. + * Default is MarshallingCodec codec + * + * @see Codec + * @see org.redisson.codec.MarshallingCodec + * + * @param codec - data codec + * @return config + */ + public void setCodec(Codec codec) { + this.codec = codec; + } + + public Duration getExpireAfterWrite() { + return expireAfterWrite; + } + + /** + * Cache entry time to live duration applied after each write operation. + * + * @param expireAfterWrite - time to live duration + */ + public void setExpireAfterWrite(Duration expireAfterWrite) { + this.expireAfterWrite = expireAfterWrite; + } + + public Duration getExpireAfterAccess() { + return expireAfterAccess; + } + + /** + * Cache entry time to live duration applied after each read operation. + * + * @param expireAfterAccess - time to live duration + */ + public void setExpireAfterAccess(Duration expireAfterAccess) { + this.expireAfterAccess = expireAfterAccess; + } + + public int getMaxSize() { + return maxSize; + } + + /** + * Max size of this cache. Superfluous elements are evicted using LRU algorithm. + * + * @param maxSize - max size + * If 0 the cache is unbounded (default). + */ + public void setMaxSize(int maxSize) { + this.maxSize = maxSize; + } + + /** + * Sets write behind tasks batch size. + * During MapWriter methods execution all updates accumulated into a batch of specified size. + *

+ * Default is 50 + * + * @param writeBehindBatchSize - size of batch + */ + public void setWriteBehindBatchSize(int writeBehindBatchSize) { + mapOptions.writeBehindBatchSize(writeBehindBatchSize); + } + + /** + * Sets write behind tasks execution delay. All updates would be applied with lag not more than specified delay. + *

+ * Default is 1000 milliseconds + * + * @param writeBehindDelay - delay in milliseconds + */ + public void setWriteBehindDelay(int writeBehindDelay) { + mapOptions.writeBehindDelay(writeBehindDelay); + } + + /** + * Sets {@link MapWriter} object used for write-through operations. + * + * @param writer object + */ + public void setWriter(MapWriter writer) { + mapOptions.writer(writer); + } + + /** + * Sets write mode. + *

+ * Default is {@link MapOptions.WriteMode#WRITE_THROUGH} + * + * @param writeMode - write mode + */ + public void setWriteMode(MapOptions.WriteMode writeMode) { + mapOptions.writeMode(writeMode); + } + + /** + * Sets {@link MapLoader} object used to load entries during read-operations execution. + * + * @param loader object + */ + public void setLoader(MapLoader loader) { + mapOptions.loader(loader); + } + + public MapOptions getMapOptions() { + return mapOptions; + } +} diff --git a/redisson-micronaut/src/main/java/org/redisson/micronaut/cache/RedissonCacheConfiguration.java b/redisson-micronaut/src/main/java/org/redisson/micronaut/cache/RedissonCacheConfiguration.java index 965c624d8..e705cec2d 100644 --- a/redisson-micronaut/src/main/java/org/redisson/micronaut/cache/RedissonCacheConfiguration.java +++ b/redisson-micronaut/src/main/java/org/redisson/micronaut/cache/RedissonCacheConfiguration.java @@ -15,13 +15,8 @@ */ package org.redisson.micronaut.cache; -import edu.umd.cs.findbugs.annotations.NonNull; import io.micronaut.context.annotation.EachProperty; import io.micronaut.context.annotation.Parameter; -import io.micronaut.core.naming.Named; -import org.redisson.client.codec.Codec; - -import java.time.Duration; /** * Micronaut Cache settings. @@ -30,81 +25,10 @@ import java.time.Duration; * */ @EachProperty("redisson.caches") -public class RedissonCacheConfiguration implements Named { - - private final String name; - - private Codec codec; - private Duration expireAfterWrite; - private Duration expireAfterAccess; - private int maxSize; +public class RedissonCacheConfiguration extends BaseCacheConfiguration { public RedissonCacheConfiguration(@Parameter String name) { - this.name = name; - } - - @NonNull - @Override - public String getName() { - return name; - } - - public Codec getCodec() { - return codec; - } - - /** - * Redis data codec applied to cache entries. - * Default is MarshallingCodec codec - * - * @see org.redisson.client.codec.Codec - * @see org.redisson.codec.MarshallingCodec - * - * @param codec - data codec - * @return config - */ - public void setCodec(Codec codec) { - this.codec = codec; - } - - public Duration getExpireAfterWrite() { - return expireAfterWrite; - } - - /** - * Cache entry time to live duration applied after each write operation. - * - * @param expireAfterWrite - time to live duration - */ - public void setExpireAfterWrite(Duration expireAfterWrite) { - this.expireAfterWrite = expireAfterWrite; - } - - public Duration getExpireAfterAccess() { - return expireAfterAccess; - } - - /** - * Cache entry time to live duration applied after each read operation. - * - * @param expireAfterAccess - time to live duration - */ - public void setExpireAfterAccess(Duration expireAfterAccess) { - this.expireAfterAccess = expireAfterAccess; - } - - public int getMaxSize() { - return maxSize; - } - - /** - * Max size of this cache. Superfluous elements are evicted using LRU algorithm. - * - * @param maxSize - max size - * If 0 the cache is unbounded (default). - */ - public void setMaxSize(int maxSize) { - this.maxSize = maxSize; + super(name); } }