From b19f30c5676820f003828b1481241d1fbfb13699 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Mon, 19 Apr 2021 10:30:28 +0300 Subject: [PATCH] Improvement - hibernate cache should read data from Redis slave if idleTime and cache size weren't specified. #2981 --- .../java/org/redisson/hibernate/region/BaseRegion.java | 7 ++++++- .../java/org/redisson/hibernate/region/BaseRegion.java | 7 ++++++- .../java/org/redisson/hibernate/region/BaseRegion.java | 7 ++++++- .../main/java/org/redisson/hibernate/RedissonStorage.java | 8 +++++++- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/redisson-hibernate/redisson-hibernate-4/src/main/java/org/redisson/hibernate/region/BaseRegion.java b/redisson-hibernate/redisson-hibernate-4/src/main/java/org/redisson/hibernate/region/BaseRegion.java index d43c184db..aecff2e40 100644 --- a/redisson-hibernate/redisson-hibernate-4/src/main/java/org/redisson/hibernate/region/BaseRegion.java +++ b/redisson-hibernate/redisson-hibernate-4/src/main/java/org/redisson/hibernate/region/BaseRegion.java @@ -48,6 +48,7 @@ public class BaseRegion implements TransactionalDataRegion, GeneralDataRegion { int ttl; int maxIdle; + int size; boolean fallback; volatile boolean fallbackMode; @@ -60,7 +61,8 @@ public class BaseRegion implements TransactionalDataRegion, GeneralDataRegion { String maxEntries = getProperty(properties, mapCache.getName(), defaultKey, RedissonRegionFactory.MAX_ENTRIES_SUFFIX); if (maxEntries != null) { - mapCache.setMaxSize(Integer.valueOf(maxEntries)); + size = Integer.valueOf(maxEntries); + mapCache.setMaxSize(size); } String timeToLive = getProperty(properties, mapCache.getName(), defaultKey, RedissonRegionFactory.TTL_SUFFIX); if (timeToLive != null) { @@ -180,6 +182,9 @@ public class BaseRegion implements TransactionalDataRegion, GeneralDataRegion { return null; } try { + if (maxIdle == 0 && size == 0) { + return mapCache.getWithTTLOnly(key); + } return mapCache.get(key); } catch (Exception e) { if (fallback) { diff --git a/redisson-hibernate/redisson-hibernate-5/src/main/java/org/redisson/hibernate/region/BaseRegion.java b/redisson-hibernate/redisson-hibernate-5/src/main/java/org/redisson/hibernate/region/BaseRegion.java index 5f9ab3cbf..ba3bf8c6a 100644 --- a/redisson-hibernate/redisson-hibernate-5/src/main/java/org/redisson/hibernate/region/BaseRegion.java +++ b/redisson-hibernate/redisson-hibernate-5/src/main/java/org/redisson/hibernate/region/BaseRegion.java @@ -49,6 +49,7 @@ public class BaseRegion implements TransactionalDataRegion, GeneralDataRegion { int ttl; int maxIdle; + int size; boolean fallback; volatile boolean fallbackMode; @@ -61,7 +62,8 @@ public class BaseRegion implements TransactionalDataRegion, GeneralDataRegion { String maxEntries = getProperty(properties, mapCache.getName(), defaultKey, RedissonRegionFactory.MAX_ENTRIES_SUFFIX); if (maxEntries != null) { - mapCache.setMaxSize(Integer.valueOf(maxEntries)); + size = Integer.valueOf(maxEntries); + mapCache.setMaxSize(size); } String timeToLive = getProperty(properties, mapCache.getName(), defaultKey, RedissonRegionFactory.TTL_SUFFIX); if (timeToLive != null) { @@ -181,6 +183,9 @@ public class BaseRegion implements TransactionalDataRegion, GeneralDataRegion { return null; } try { + if (maxIdle == 0 && size == 0) { + return mapCache.getWithTTLOnly(key); + } return mapCache.get(key); } catch (Exception e) { if (fallback) { diff --git a/redisson-hibernate/redisson-hibernate-52/src/main/java/org/redisson/hibernate/region/BaseRegion.java b/redisson-hibernate/redisson-hibernate-52/src/main/java/org/redisson/hibernate/region/BaseRegion.java index 2796a5226..221afdc0b 100644 --- a/redisson-hibernate/redisson-hibernate-52/src/main/java/org/redisson/hibernate/region/BaseRegion.java +++ b/redisson-hibernate/redisson-hibernate-52/src/main/java/org/redisson/hibernate/region/BaseRegion.java @@ -49,6 +49,7 @@ public class BaseRegion implements TransactionalDataRegion, GeneralDataRegion { int ttl; int maxIdle; + int size; boolean fallback; volatile boolean fallbackMode; @@ -61,7 +62,8 @@ public class BaseRegion implements TransactionalDataRegion, GeneralDataRegion { String maxEntries = getProperty(properties, mapCache.getName(), defaultKey, RedissonRegionFactory.MAX_ENTRIES_SUFFIX); if (maxEntries != null) { - mapCache.setMaxSize(Integer.valueOf(maxEntries)); + size = Integer.valueOf(maxEntries); + mapCache.setMaxSize(size); } String timeToLive = getProperty(properties, mapCache.getName(), defaultKey, RedissonRegionFactory.TTL_SUFFIX); if (timeToLive != null) { @@ -181,6 +183,9 @@ public class BaseRegion implements TransactionalDataRegion, GeneralDataRegion { return null; } try { + if (maxIdle == 0 && size == 0) { + return mapCache.getWithTTLOnly(key); + } return mapCache.get(key); } catch (Exception e) { if (fallback) { diff --git a/redisson-hibernate/redisson-hibernate-53/src/main/java/org/redisson/hibernate/RedissonStorage.java b/redisson-hibernate/redisson-hibernate-53/src/main/java/org/redisson/hibernate/RedissonStorage.java index 6e2626631..9c877d441 100644 --- a/redisson-hibernate/redisson-hibernate-53/src/main/java/org/redisson/hibernate/RedissonStorage.java +++ b/redisson-hibernate/redisson-hibernate-53/src/main/java/org/redisson/hibernate/RedissonStorage.java @@ -42,6 +42,7 @@ public class RedissonStorage implements DomainDataStorageAccess { int ttl; int maxIdle; + int size; boolean fallback; volatile boolean fallbackMode; @@ -52,7 +53,8 @@ public class RedissonStorage implements DomainDataStorageAccess { String maxEntries = getProperty(properties, mapCache.getName(), defaultKey, RedissonRegionFactory.MAX_ENTRIES_SUFFIX); if (maxEntries != null) { - mapCache.setMaxSize(Integer.valueOf(maxEntries)); + size = Integer.valueOf(maxEntries); + mapCache.setMaxSize(size); } String timeToLive = getProperty(properties, mapCache.getName(), defaultKey, RedissonRegionFactory.TTL_SUFFIX); if (timeToLive != null) { @@ -99,6 +101,10 @@ public class RedissonStorage implements DomainDataStorageAccess { return null; } try { + if (maxIdle == 0 && size == 0) { + return mapCache.getWithTTLOnly(key); + } + return mapCache.get(key); } catch (Exception e) { if (fallback) {