From 0f91ced5a0b1ebbf73709cdf2e13643ac66e4eff Mon Sep 17 00:00:00 2001 From: Costin Leau Date: Wed, 15 Dec 2010 12:14:15 +0200 Subject: [PATCH] + atomic counters support reading values from the backing store (rather then always use 0) --- .../redis/support/atomic/RedisAtomicInteger.java | 13 +++++++++++-- .../redis/support/atomic/RedisAtomicLong.java | 13 +++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicInteger.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicInteger.java index d2dcb53a7..70d377667 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicInteger.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicInteger.java @@ -36,13 +36,22 @@ public class RedisAtomicInteger extends Number implements Serializable, KeyBound private RedisOperations generalOps; /** - * Constructs a new RedisAtomicInteger instance with an initial value of zero. + * Constructs a new RedisAtomicInteger instance. Uses as initial value + * the data from the backing store (sets the counter to 0 if no value is found). + * + * Use {@link #RedisAtomicInteger(String, RedisOperations, int)} to set the counter to a certain value + * as an alternative constructor or {@link #set(int)}. * * @param redisCounter * @param operations */ public RedisAtomicInteger(String redisCounter, RedisOperations operations) { - this(redisCounter, operations, 0); + this.key = redisCounter; + this.operations = operations.getValueOps(); + this.generalOps = operations; + if (this.operations.get(redisCounter) == null) { + set(0); + } } /** diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicLong.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicLong.java index 210504c0b..4c3b1fa96 100644 --- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicLong.java +++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/support/atomic/RedisAtomicLong.java @@ -36,13 +36,22 @@ public class RedisAtomicLong extends Number implements Serializable, KeyBound generalOps; /** - * Constructs a new RedisAtomicLong instance with an initial value of zero. + * Constructs a new RedisAtomicLong instance. Uses as initial value + * the data from the backing store (sets the counter to 0 if no value is found). * + * Use {@link #RedisAtomicLong(String, RedisOperations, int)} to set the counter to a certain value + * as an alternative constructor or {@link #set(int)}. + * * @param redisCounter * @param operations */ public RedisAtomicLong(String redisCounter, RedisOperations operations) { - this(redisCounter, operations, 0); + this.key = redisCounter; + this.operations = operations.getValueOps(); + this.generalOps = operations; + if (this.operations.get(redisCounter) == null) { + set(0); + } } /**