diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/DefaultSortParameters.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/DefaultSortParameters.java
index b03c91fef..0098ac36e 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/DefaultSortParameters.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/DefaultSortParameters.java
@@ -56,11 +56,11 @@ public class DefaultSortParameters implements SortParameters {
* @param order
* @param alphabetic
*/
- public DefaultSortParameters(byte[] by, Range limit, byte[] get, Order order, Boolean alphabetic) {
+ public DefaultSortParameters(byte[] byPattern, Range limit, byte[] getPattern, Order order, Boolean alphabetic) {
super();
- this.byPattern = by;
+ this.byPattern = byPattern;
this.limit = limit;
- this.getPattern = get;
+ this.getPattern = getPattern;
this.order = order;
this.alphabetic = alphabetic;
}
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisStringCommands.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisStringCommands.java
index 757dd1ba9..1f70a8210 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisStringCommands.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/RedisStringCommands.java
@@ -52,5 +52,5 @@ public interface RedisStringCommands {
Long append(byte[] key, byte[] value);
- byte[] substr(byte[] key, long start, long end);
+ byte[] substr(byte[] key, int start, int end);
}
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnection.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnection.java
index b50bf7e67..bff80afef 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnection.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnection.java
@@ -499,7 +499,7 @@ public class JedisConnection implements RedisConnection {
}
@Override
- public byte[] substr(byte[] key, long start, long end) {
+ public byte[] substr(byte[] key, int start, int end) {
try {
if (isQueueing()) {
transaction.substr(key, (int) start, (int) end);
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnectionFactory.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnectionFactory.java
index 2cb20a879..186229230 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnectionFactory.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/JedisConnectionFactory.java
@@ -59,7 +59,7 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean,
/**
* Constructs a new JedisConnectionFactory instance.
*
- * @param hostname
+ * @param hostName
*/
public JedisConnectionFactory(String hostName) {
Assert.hasText(hostName);
@@ -69,7 +69,7 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean,
/**
* Constructs a new JedisConnectionFactory instance.
*
- * @param hostname
+ * @param hostName
* @param port
*/
public JedisConnectionFactory(String hostName, int port) {
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/package-info.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/package-info.java
index b1f4bfd97..40ce7c10d 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/package-info.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jedis/package-info.java
@@ -1,5 +1,5 @@
/**
- *
Connection package for Jedis library.
+ * Connection package for Jedis library.
*/
package org.springframework.data.keyvalue.redis.connection.jedis;
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/JredisConnection.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/JredisConnection.java
index 1fa82e638..1d598bd7d 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/JredisConnection.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/JredisConnection.java
@@ -330,7 +330,7 @@ public class JredisConnection implements RedisConnection {
}
@Override
- public byte[] substr(byte[] key, long start, long end) {
+ public byte[] substr(byte[] key, int start, int end) {
try {
return jredis.substr(JredisUtils.decode(key), start, end);
} catch (RedisException ex) {
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/package-info.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/package-info.java
index 50fad613e..0affe42a0 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/package-info.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/connection/jredis/package-info.java
@@ -1,5 +1,5 @@
/**
- * Connection package for JRedis library.
+ * Connection package for JRedis library.
*/
package org.springframework.data.keyvalue.redis.connection.jredis;
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundKeyOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundKeyOperations.java
deleted file mode 100644
index 69de46eb9..000000000
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundKeyOperations.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2010 the original author or authors.
- *
- * 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.springframework.data.keyvalue.redis.core;
-
-import java.util.Date;
-import java.util.concurrent.TimeUnit;
-
-import org.springframework.data.keyvalue.redis.connection.DataType;
-
-/**
- * Key operations bound to a certain value.
- *
- * @author Costin Leau
- */
-public interface BoundKeyOperations extends KeyBound {
-
- Boolean exists();
-
- void delete();
-
- DataType type();
-
- void rename(K newKey);
-
- Boolean renameIfAbsent(K newKey);
-
- Boolean expire(long timeout, TimeUnit unit);
-
- Boolean expireAt(Date date);
-
- Long getExpire();
-
- void persist();
-}
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundSetOperations.java
index e9274e453..35c3773a0 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundSetOperations.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundSetOperations.java
@@ -46,7 +46,13 @@ public interface BoundSetOperations extends KeyBound {
Set members();
+ Boolean move(K destKey, V value);
+
+ V randomMember();
+
Boolean remove(Object o);
+ V pop();
+
Long size();
}
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundValueOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundValueOperations.java
index 4e8eb4f6d..42e5866ba 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundValueOperations.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundValueOperations.java
@@ -24,6 +24,8 @@ import java.util.concurrent.TimeUnit;
*/
public interface BoundValueOperations extends KeyBound {
+ RedisOperations getOperations();
+
void set(V value);
void set(V value, long timeout, TimeUnit unit);
@@ -36,4 +38,8 @@ public interface BoundValueOperations extends KeyBound {
Long increment(long delta);
+ Integer append(String value);
+
+ String substract(int start, int end);
+
}
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundZSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundZSetOperations.java
index e3df62abf..a2cbf9cda 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundZSetOperations.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/BoundZSetOperations.java
@@ -45,6 +45,8 @@ public interface BoundZSetOperations extends KeyBound {
Boolean add(V value, double score);
+ Double incrementScore(V value, double delta);
+
Long rank(Object o);
Long reverseRank(Object o);
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundHashOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundHashOperations.java
index f531d5628..4ed2aece3 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundHashOperations.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundHashOperations.java
@@ -36,7 +36,7 @@ class DefaultBoundHashOperations extends DefaultKeyBound implement
*/
public DefaultBoundHashOperations(H key, RedisOperations operations) {
super(key);
- this.ops = operations.hashOps();
+ this.ops = operations.getHashOps();
}
@Override
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundListOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundListOperations.java
index c69181acb..5793f57ae 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundListOperations.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundListOperations.java
@@ -36,7 +36,7 @@ class DefaultBoundListOperations extends DefaultKeyBound implements Bou
*/
public DefaultBoundListOperations(K key, RedisOperations operations) {
super(key);
- this.ops = operations.listOps();
+ this.ops = operations.getListOps();
}
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java
index b2770c0d9..5d0ca9a23 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundSetOperations.java
@@ -37,7 +37,7 @@ class DefaultBoundSetOperations extends DefaultKeyBound implements Boun
*/
DefaultBoundSetOperations(K key, RedisOperations operations) {
super(key);
- this.ops = operations.setOps();
+ this.ops = operations.getSetOps();
}
@Override
@@ -47,12 +47,12 @@ class DefaultBoundSetOperations extends DefaultKeyBound implements Boun
@Override
public Set diff(Collection keys) {
- return ops.diff(getKey(), keys);
+ return ops.difference(getKey(), keys);
}
@Override
public void diffAndStore(K destKey, Collection keys) {
- ops.diffAndStore(getKey(), destKey, keys);
+ ops.differenceAndStore(getKey(), destKey, keys);
}
@Override
@@ -80,11 +80,26 @@ class DefaultBoundSetOperations extends DefaultKeyBound implements Boun
return ops.members(getKey());
}
+ @Override
+ public Boolean move(K destKey, V value) {
+ return ops.move(getKey(), destKey, value);
+ }
+
+ @Override
+ public V randomMember() {
+ return ops.randomMember(getKey());
+ }
+
@Override
public Boolean remove(Object o) {
return ops.remove(getKey(), o);
}
+ @Override
+ public V pop() {
+ return ops.pop(getKey());
+ }
+
@Override
public Long size() {
return ops.size(getKey());
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java
index 8de451738..8d8256ab3 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundValueOperations.java
@@ -32,7 +32,7 @@ class DefaultBoundValueOperations extends DefaultKeyBound implements Bo
*/
public DefaultBoundValueOperations(K key, RedisOperations operations) {
super(key);
- this.ops = operations.valueOps();
+ this.ops = operations.getValueOps();
}
@Override
@@ -50,6 +50,16 @@ class DefaultBoundValueOperations extends DefaultKeyBound implements Bo
return ops.increment(getKey(), delta);
}
+ @Override
+ public Integer append(String value) {
+ return ops.append(getKey(), value);
+ }
+
+ @Override
+ public String substract(int start, int end) {
+ return ops.substract(getKey(), start, end);
+ }
+
@Override
public void set(V value, long timeout, TimeUnit unit) {
ops.set(getKey(), value, timeout, unit);
@@ -64,4 +74,9 @@ class DefaultBoundValueOperations extends DefaultKeyBound implements Bo
public Boolean setIfAbsent(V value) {
return ops.setIfAbsent(getKey(), value);
}
+
+ @Override
+ public RedisOperations getOperations() {
+ return ops.getOperations();
+ }
}
\ No newline at end of file
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundZSetOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundZSetOperations.java
index 44740a7c5..6feec78e0 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundZSetOperations.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/DefaultBoundZSetOperations.java
@@ -36,7 +36,7 @@ class DefaultBoundZSetOperations extends DefaultKeyBound implements Bou
*/
public DefaultBoundZSetOperations(K key, RedisOperations oeprations) {
super(key);
- this.ops = oeprations.zSetOps();
+ this.ops = oeprations.getZSetOps();
}
@Override
@@ -44,6 +44,11 @@ class DefaultBoundZSetOperations extends DefaultKeyBound implements Bou
return ops.add(getKey(), value, score);
}
+ @Override
+ public Double incrementScore(V value, double delta) {
+ return ops.incrementScore(getKey(), value, delta);
+ }
+
@Override
public RedisOperations getOperations() {
return ops.getOperations();
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ListOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ListOperations.java
index 8a7f99707..ed423f454 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ListOperations.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/ListOperations.java
@@ -49,5 +49,7 @@ public interface ListOperations {
V rightPop(K key, long timeout, TimeUnit unit);
+ V rightPopAndLeftPush(K sourceKey, K destinationKey);
+
RedisOperations getOperations();
}
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java
index 7dcbb3ab2..a682170d2 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisOperations.java
@@ -50,7 +50,7 @@ public interface RedisOperations {
*/
T execute(RedisCallback action);
- Boolean exists(K key);
+ Boolean hasKey(K key);
void delete(Collection key);
@@ -74,31 +74,97 @@ public interface RedisOperations {
void watch(Collection keys);
+ void unwatch();
+
void multi();
+ void discard();
+
Object exec();
List sort(K key, SortParameters params);
Long sort(K key, SortParameters params, K destination);
- ValueOperations valueOps();
+ // operation types
+ /**
+ * Returns the operations performed on simple values (or Strings in Redis terminology).
+ *
+ * @return value operations
+ */
+ ValueOperations getValueOps();
- BoundValueOperations forValue(K key);
+ /**
+ * Returns the operations performed on simple values (or Strings in Redis terminology)
+ * bound to the given key.
+ *
+ * @param key Redis key
+ * @return value operations bound to the given key
+ */
+ BoundValueOperations boundValueOps(K key);
- ListOperations listOps();
+ /**
+ * Returns the operations performed on list values.
+ *
+ * @return list operations
+ */
+ ListOperations getListOps();
- BoundListOperations forList(K key);
+ /**
+ * Returns the operations performed on list values bound to the given key.
+ *
+ * @param key Redis key
+ * @return list operations bound to the given key
+ */
+ BoundListOperations boundListOps(K key);
- SetOperations setOps();
+ /**
+ * Returns the operations performed on set values.
+ *
+ * @return set operations
+ */
+ SetOperations getSetOps();
- BoundSetOperations forSet(K key);
+ /**
+ * Returns the operations performed on set values bound to the given key.
+ *
+ * @param key Redis key
+ * @return set operations bound to the given key
+ */
+ BoundSetOperations boundSetOps(K key);
- ZSetOperations zSetOps();
+ /**
+ * Returns the operations performed on zset values (also known as sorted sets).
+ *
+ * @return zset operations
+ */
+ ZSetOperations getZSetOps();
- BoundZSetOperations forZSet(K key);
+ /**
+ * Returns the operations performed on zset values (also known as sorted sets)
+ * bound to the given key.
+ *
+ * @param key Redis key
+ * @return zset operations bound to the given key.
+ */
+ BoundZSetOperations boundZSetOps(K key);
- HashOperations hashOps();
+ /**
+ * Returns the operations performed on hash values.
+ *
+ * @param hash key (or field) type
+ * @param hash value type
+ * @return hash operations
+ */
+ HashOperations getHashOps();
- BoundHashOperations forHash(K key);
+ /**
+ * Returns the operations performed on hash values bound to the given key.
+ *
+ * @param hash key (or field) type
+ * @param hash value type
+ * @param key Redis key
+ * @return hash operations bound to the given key.
+ */
+ BoundHashOperations boundHashOps(K key);
}
\ No newline at end of file
diff --git a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java
index bf9231745..314dfdc65 100644
--- a/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java
+++ b/spring-data-redis/src/main/java/org/springframework/data/keyvalue/redis/core/RedisTemplate.java
@@ -71,6 +71,13 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation
private RedisSerializer valueSerializer = new SimpleRedisSerializer();
private RedisSerializer hashKeySerializer = new SimpleRedisSerializer();
private RedisSerializer hashValueSerializer = new SimpleRedisSerializer();
+ private RedisSerializer stringSerializer = new StringRedisSerializer();
+
+ // cache singleton objects (where possible)
+ private final ValueOperations valueOps = new DefaultValueOperations();
+ private final ListOperations listOps = new DefaultListOperations();
+ private final SetOperations setOps = new DefaultSetOperations();
+ private final ZSetOperations zSetOps = new DefaultZSetOperations();
/**
* Constructs a new RedisTemplate instance.
@@ -199,6 +206,16 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation
this.hashValueSerializer = hashValueSerializer;
}
+ /**
+ * Sets the string value serializer to be used by this template (when the arguments or return types
+ * are always strings). Defaults to {@link StringRedisSerializer}.
+ *
+ * @see ValueOperations#substract(Object, int, int)
+ * @param stringSerializer The stringValueSerializer to set.
+ */
+ public void setStringSerializer(RedisSerializer> stringSerializer) {
+ this.stringSerializer = stringSerializer;
+ }
/**
* Invocation handler that suppresses close calls on JDO PersistenceManagers.
@@ -244,6 +261,11 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation
return (key != null ? keySerializer.serialize(key) : null);
}
+ @SuppressWarnings("unchecked")
+ private byte[] rawString(String key) {
+ return (key != null ? stringSerializer.serialize(key) : null);
+ }
+
@SuppressWarnings("unchecked")
private byte[] rawValue(T value) {
return (value != null ? valueSerializer.serialize(value) : null);
@@ -333,6 +355,11 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation
return (V) deserialize(value, valueSerializer);
}
+ @SuppressWarnings("unchecked")
+ private String deserializeString(byte[] value) {
+ return (String) deserialize(value, stringSerializer);
+ }
+
@SuppressWarnings( { "unchecked", "unused" })
private HK deserializeHashKey(byte[] value) {
return (HK) deserialize(value, hashKeySerializer);
@@ -350,6 +377,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation
return serializer.deserialize(value);
}
+
private static boolean isEmpty(byte[] data) {
return (data == null || data.length == 0);
}
@@ -376,6 +404,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperation
// RedisOperations
//
+
@Override
public Object exec() {
return execute(new RedisCallback