diff --git a/ebean-redis/src/main/java/io/ebean/redis/DuelCache.java b/ebean-redis/src/main/java/io/ebean/redis/DuelCache.java index 80025e7cc..819d0f3f1 100644 --- a/ebean-redis/src/main/java/io/ebean/redis/DuelCache.java +++ b/ebean-redis/src/main/java/io/ebean/redis/DuelCache.java @@ -9,7 +9,7 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; -public class DuelCache implements ServerCache, NearCacheInvalidate { +public final class DuelCache implements ServerCache, NearCacheInvalidate { private final DefaultServerCache near; private final RedisCache remote; @@ -46,10 +46,8 @@ public class DuelCache implements ServerCache, NearCacheInvalidate { @Override public Map getAll(Set keys) { - Map resultMap = near.getAll(keys); Set localKeys = resultMap.keySet(); - Set remainingKeys = new HashSet<>(); for (Object key : keys) { if (!localKeys.contains(key)) { @@ -64,7 +62,6 @@ public class DuelCache implements ServerCache, NearCacheInvalidate { resultMap.putAll(remoteMap); } } - return resultMap; } diff --git a/ebean-redis/src/main/java/io/ebean/redis/ModId.java b/ebean-redis/src/main/java/io/ebean/redis/ModId.java index f063dea0c..95242742a 100644 --- a/ebean-redis/src/main/java/io/ebean/redis/ModId.java +++ b/ebean-redis/src/main/java/io/ebean/redis/ModId.java @@ -20,7 +20,7 @@ import java.util.Base64; * Note that this now internally uses java.util.Base64 to encode the values. *

*/ -public class ModId { +public final class ModId { private static final SecureRandom shortIdSecureRandom = new SecureRandom(); @@ -35,7 +35,6 @@ public class ModId { *

*/ public static String id() { - // Random 72 bits byte[] randomBytes = new byte[9]; shortIdSecureRandom.nextBytes(randomBytes); diff --git a/ebean-redis/src/main/java/io/ebean/redis/RedisCache.java b/ebean-redis/src/main/java/io/ebean/redis/RedisCache.java index a69fb6766..a750ac204 100644 --- a/ebean-redis/src/main/java/io/ebean/redis/RedisCache.java +++ b/ebean-redis/src/main/java/io/ebean/redis/RedisCache.java @@ -24,7 +24,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -class RedisCache implements ServerCache { +final class RedisCache implements ServerCache { private static final Logger log = LoggerFactory.getLogger(RedisCache.class); @@ -35,7 +35,6 @@ class RedisCache implements ServerCache { private final String cacheKey; private final Encode keyEncode; private final Encode valueEncode; - private final TimedMetric metricGet; private final TimedMetric metricGetAll; private final TimedMetric metricPut; @@ -47,7 +46,6 @@ class RedisCache implements ServerCache { private final CountMetric missCount; RedisCache(JedisPool jedisPool, ServerCacheConfig config, Encode valueEncode) { - this.jedisPool = jedisPool; this.cacheKey = config.getCacheKey(); this.keyEncode = new EncodePrefixKey(config.getCacheKey()); @@ -106,10 +104,8 @@ class RedisCache implements ServerCache { @Override public Map getAll(Set keys) { - long start = System.nanoTime(); Map map = new LinkedHashMap<>(); - List keyList = new ArrayList<>(keys); try (Jedis resource = jedisPool.getResource()) { List valsAsBytes = resource.mget(keysAsBytes(keyList)); @@ -147,7 +143,6 @@ class RedisCache implements ServerCache { } } - @Override public void put(Object id, Object value) { long start = System.nanoTime(); @@ -203,7 +198,6 @@ class RedisCache implements ServerCache { public void clear() { long start = System.nanoTime(); try (Jedis resource = jedisPool.getResource()) { - ScanParams params = new ScanParams(); params.match(cacheKey + ":*"); @@ -224,7 +218,6 @@ class RedisCache implements ServerCache { next = SafeEncoder.encode(nextCursor); } while (!next.equals("0")); - metricClear.addSinceNanos(start); } } diff --git a/ebean-redis/src/main/java/io/ebean/redis/RedisCacheFactory.java b/ebean-redis/src/main/java/io/ebean/redis/RedisCacheFactory.java index 93ed840e1..78a946cad 100644 --- a/ebean-redis/src/main/java/io/ebean/redis/RedisCacheFactory.java +++ b/ebean-redis/src/main/java/io/ebean/redis/RedisCacheFactory.java @@ -38,14 +38,12 @@ import java.util.concurrent.ConcurrentHashMap; import static java.util.Arrays.asList; -class RedisCacheFactory implements ServerCacheFactory { +final class RedisCacheFactory implements ServerCacheFactory { private static final Logger log = LoggerFactory.getLogger(RedisCacheFactory.class); private static final Logger queryLogger = LoggerFactory.getLogger("io.ebean.cache.QUERY"); - private static final Logger logger = LoggerFactory.getLogger("io.ebean.cache.CACHE"); - private static final Logger tableModLogger = LoggerFactory.getLogger("io.ebean.cache.TABLEMODS"); private static final int MSG_NEARCACHE_CLEAR = 1; @@ -66,30 +64,22 @@ class RedisCacheFactory implements ServerCacheFactory { private static final byte[] CHANNEL_NEAR_BYTES = SafeEncoder.encode(CHANNEL_NEAR); private final ConcurrentHashMap queryCaches = new ConcurrentHashMap<>(); - private final Map nearCacheMap = new ConcurrentHashMap<>(); - private final EncodeManyIdsData encodeManyIdsData = new EncodeManyIdsData(); private final EncodeBeanData encodeBeanData = new EncodeBeanData(); private final EncodeSerializable encodeSerializable = new EncodeSerializable(); private final BackgroundExecutor executor; - private final JedisPool jedisPool; - private final DaemonTopicRunner daemonTopicRunner; - private final NearCacheNotify nearCacheNotify; - private final TimedMetric metricOutNearCache; private final TimedMetric metricOutTableMod; private final TimedMetric metricOutQueryCache; private final TimedMetric metricInNearCache; private final TimedMetric metricInTableMod; private final TimedMetric metricInQueryCache; - private final String serverId = ModId.id(); - private ServerCacheNotify listener; RedisCacheFactory(DatabaseConfig config, BackgroundExecutor executor) { @@ -148,7 +138,6 @@ class RedisCacheFactory implements ServerCacheFactory { } private ServerCache createNormalCache(ServerCacheConfig config) { - RedisCache redisCache = createRedisCache(config); boolean nearCache = config.getCacheOptions().isNearCache(); if (!nearCache) { @@ -156,17 +145,14 @@ class RedisCacheFactory implements ServerCacheFactory { } String cacheKey = config.getCacheKey(); - DefaultServerCache near = new DefaultServerCache(new DefaultServerCacheConfig(config)); near.periodicTrim(executor); DuelCache duelCache = new DuelCache(near, redisCache, cacheKey, nearCacheNotify); nearCacheMap.put(cacheKey, duelCache); - return duelCache; } private RedisCache createRedisCache(ServerCacheConfig config) { - switch (config.getType()) { case NATURAL_KEY: return new RedisCache(jedisPool, config, encodeSerializable); @@ -247,15 +233,12 @@ class RedisCacheFactory implements ServerCacheFactory { @Override public void notify(ServerCacheNotification tableModifications) { - Set dependentTables = tableModifications.getDependentTables(); if (dependentTables != null && !dependentTables.isEmpty()) { - StringBuilder msg = new StringBuilder(50); for (String table : dependentTables) { msg.append(table).append(","); } - String formattedMsg = msg.toString(); if (tableModLogger.isDebugEnabled()) { tableModLogger.debug("Publish TableMods - {}", formattedMsg); diff --git a/ebean-redis/src/main/java/io/ebean/redis/RedisConfig.java b/ebean-redis/src/main/java/io/ebean/redis/RedisConfig.java index 1b738cff9..a27fd77b6 100644 --- a/ebean-redis/src/main/java/io/ebean/redis/RedisConfig.java +++ b/ebean-redis/src/main/java/io/ebean/redis/RedisConfig.java @@ -11,25 +11,15 @@ import java.util.Properties; public class RedisConfig { private String server = "localhost"; - private int port = 6379; - private int maxTotal = 200; - private int maxIdle = 200; - private int minIdle = 1; - private long maxWaitMillis = -1L; - private boolean blockWhenExhausted = true; - private int timeout = 2000; - private String username; - private String password; - private boolean ssl; /** diff --git a/ebean-redis/src/main/java/io/ebean/redis/encode/EncodeBeanData.java b/ebean-redis/src/main/java/io/ebean/redis/encode/EncodeBeanData.java index 5dd9e31f2..2c12ce05b 100644 --- a/ebean-redis/src/main/java/io/ebean/redis/encode/EncodeBeanData.java +++ b/ebean-redis/src/main/java/io/ebean/redis/encode/EncodeBeanData.java @@ -12,16 +12,13 @@ public class EncodeBeanData implements Encode { @Override public byte[] encode(Object value) { - try { CachedBeanData data = (CachedBeanData) value; ByteArrayOutputStream os = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(os); - data.writeExternal(oos); oos.flush(); oos.close(); - return os.toByteArray(); } catch (IOException e) { @@ -31,11 +28,9 @@ public class EncodeBeanData implements Encode { @Override public Object decode(byte[] data) { - try { ByteArrayInputStream is = new ByteArrayInputStream(data); ObjectInputStream ois = new ObjectInputStream(is); - CachedBeanData read = new CachedBeanData(); read.readExternal(ois); return read; diff --git a/ebean-redis/src/main/java/io/ebean/redis/encode/EncodeManyIdsData.java b/ebean-redis/src/main/java/io/ebean/redis/encode/EncodeManyIdsData.java index dc33b3bb4..2be4e76ae 100644 --- a/ebean-redis/src/main/java/io/ebean/redis/encode/EncodeManyIdsData.java +++ b/ebean-redis/src/main/java/io/ebean/redis/encode/EncodeManyIdsData.java @@ -12,18 +12,14 @@ public class EncodeManyIdsData implements Encode { @Override public byte[] encode(Object value) { - try { CachedManyIds data = (CachedManyIds) value; ByteArrayOutputStream os = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(os); - data.writeExternal(oos); oos.flush(); oos.close(); - return os.toByteArray(); - } catch (IOException e) { throw new RuntimeException("Failed to decode cache data", e); } @@ -31,15 +27,12 @@ public class EncodeManyIdsData implements Encode { @Override public Object decode(byte[] data) { - try { ByteArrayInputStream is = new ByteArrayInputStream(data); ObjectInputStream ois = new ObjectInputStream(is); - CachedManyIds read = new CachedManyIds(); read.readExternal(ois); return read; - } catch (ClassNotFoundException | IOException e) { throw new RuntimeException("Failed to decode cache data", e); } diff --git a/ebean-redis/src/main/java/io/ebean/redis/encode/EncodePrefixKey.java b/ebean-redis/src/main/java/io/ebean/redis/encode/EncodePrefixKey.java index fd6605d24..99faa49cd 100644 --- a/ebean-redis/src/main/java/io/ebean/redis/encode/EncodePrefixKey.java +++ b/ebean-redis/src/main/java/io/ebean/redis/encode/EncodePrefixKey.java @@ -18,10 +18,8 @@ public class EncodePrefixKey implements Encode { if (!(value instanceof String) && !(value instanceof TenantAwareKey.CacheKey)) { throw new IllegalStateException("Expecting String keys but got type:" + value.getClass()); } - - String key = prefix + value.toString(); + String key = prefix + value; return key.getBytes(StandardCharsets.UTF_8); - } catch (Exception e) { throw new RuntimeException("Failed to decode cache data", e); } diff --git a/ebean-redis/src/main/java/io/ebean/redis/encode/EncodeSerializable.java b/ebean-redis/src/main/java/io/ebean/redis/encode/EncodeSerializable.java index 5a63b243c..c41336761 100644 --- a/ebean-redis/src/main/java/io/ebean/redis/encode/EncodeSerializable.java +++ b/ebean-redis/src/main/java/io/ebean/redis/encode/EncodeSerializable.java @@ -10,15 +10,12 @@ public class EncodeSerializable implements Encode { @Override public byte[] encode(Object value) { - try { ObjectOutputStream oos = new ObjectOutputStream(new ByteArrayOutputStream()); oos.writeObject(value); oos.flush(); oos.close(); - return new ByteArrayOutputStream().toByteArray(); - } catch (IOException e) { throw new RuntimeException("Failed to decode cache data", e); } diff --git a/ebean-redis/src/main/java/io/ebean/redis/topic/DaemonTopicRunner.java b/ebean-redis/src/main/java/io/ebean/redis/topic/DaemonTopicRunner.java index 2771c0766..9ab2fce9c 100644 --- a/ebean-redis/src/main/java/io/ebean/redis/topic/DaemonTopicRunner.java +++ b/ebean-redis/src/main/java/io/ebean/redis/topic/DaemonTopicRunner.java @@ -23,7 +23,6 @@ public class DaemonTopicRunner { private static final long reconnectWaitMillis = 1000; private final JedisPool jedisPool; - private final DaemonTopic daemonTopic; public DaemonTopicRunner(JedisPool jedisPool, DaemonTopic daemonTopic) { @@ -37,11 +36,9 @@ public class DaemonTopicRunner { } private void attemptConnections() { - Timer reloadTimer = new Timer("redis-sub-notify"); ReloadNotifyTask notifyTask = null; int attempts = 1; - while (true) { if (notifyTask != null) { // we didn't successfully re-connect to redis @@ -72,11 +69,9 @@ public class DaemonTopicRunner { jedis.echo("hi"); try { daemonTopic.subscribe(jedis); - } catch (Exception e) { log.error("Lost connection to topic, starting re-connection loop", e); attemptConnections(); - } finally { try { jedis.close();