diff --git a/src/main/java/org/springframework/data/redis/core/AbstractOperations.java b/src/main/java/org/springframework/data/redis/core/AbstractOperations.java index 3ca947abc..218ff7e15 100644 --- a/src/main/java/org/springframework/data/redis/core/AbstractOperations.java +++ b/src/main/java/org/springframework/data/redis/core/AbstractOperations.java @@ -44,6 +44,7 @@ import org.springframework.util.CollectionUtils; * @author Christoph Strobl * @author David Liu * @author Mark Paluch + * @author Denis Zavedeev */ abstract class AbstractOperations { @@ -64,7 +65,7 @@ abstract class AbstractOperations { protected abstract byte[] inRedis(byte[] rawKey, RedisConnection connection); } - RedisTemplate template; + final RedisTemplate template; AbstractOperations(RedisTemplate template) { this.template = template; diff --git a/src/main/java/org/springframework/data/redis/core/RedisTemplate.java b/src/main/java/org/springframework/data/redis/core/RedisTemplate.java index 6f6bc2f19..173062ec0 100644 --- a/src/main/java/org/springframework/data/redis/core/RedisTemplate.java +++ b/src/main/java/org/springframework/data/redis/core/RedisTemplate.java @@ -79,6 +79,7 @@ import org.springframework.util.CollectionUtils; * @author Ninad Divadkar * @author Anqing Shao * @author Mark Paluch + * @author Denis Zavedeev * @param the Redis key type against which the template works (usually a String) * @param the Redis value type against which the template works * @see StringRedisTemplate @@ -100,13 +101,13 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation private @Nullable ScriptExecutor scriptExecutor; - // cache singleton objects (where possible) - private @Nullable ValueOperations valueOps; - private @Nullable ListOperations listOps; - private @Nullable SetOperations setOps; - private @Nullable ZSetOperations zSetOps; - private @Nullable GeoOperations geoOps; - private @Nullable HyperLogLogOperations hllOps; + private final ValueOperations valueOps = new DefaultValueOperations<>(this); + private final ListOperations listOps = new DefaultListOperations<>(this); + private final SetOperations setOps = new DefaultSetOperations<>(this); + private final ZSetOperations zSetOps = new DefaultZSetOperations<>(this); + private final GeoOperations geoOps = new DefaultGeoOperations<>(this); + private final HyperLogLogOperations hllOps = new DefaultHyperLogLogOperations<>(this); + private final ClusterOperations clusterOps = new DefaultClusterOperations<>(this); /** * Constructs a new RedisTemplate instance. @@ -1200,7 +1201,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation */ @Override public ClusterOperations opsForCluster() { - return new DefaultClusterOperations<>(this); + return clusterOps; } /* @@ -1209,10 +1210,6 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation */ @Override public GeoOperations opsForGeo() { - - if (geoOps == null) { - geoOps = new DefaultGeoOperations<>(this); - } return geoOps; } @@ -1249,10 +1246,6 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation */ @Override public HyperLogLogOperations opsForHyperLogLog() { - - if (hllOps == null) { - hllOps = new DefaultHyperLogLogOperations<>(this); - } return hllOps; } @@ -1262,10 +1255,6 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation */ @Override public ListOperations opsForList() { - - if (listOps == null) { - listOps = new DefaultListOperations<>(this); - } return listOps; } @@ -1293,10 +1282,6 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation */ @Override public SetOperations opsForSet() { - - if (setOps == null) { - setOps = new DefaultSetOperations<>(this); - } return setOps; } @@ -1315,10 +1300,6 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation */ @Override public ValueOperations opsForValue() { - - if (valueOps == null) { - valueOps = new DefaultValueOperations<>(this); - } return valueOps; } @@ -1337,10 +1318,6 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation */ @Override public ZSetOperations opsForZSet() { - - if (zSetOps == null) { - zSetOps = new DefaultZSetOperations<>(this); - } return zSetOps; }