Fixed - Missed methods implementation of Spring Data Redis module: zRevRangeByLex(), time(TimeUnit), zRemRangeByLex(), zLexCount(), rewriteConfig(), zRangeStoreByLex(), zRangeStoreRevByLex(), zRangeStoreByScore(), zRangeStoreRevByScore(), flushDb(), flushAll(), replicaOf(), replicaOfNoOne() #5144

pull/5153/head
Nikita Koksharov 2 years ago
parent 493de7a25e
commit 15e21f05f5

@ -1751,13 +1751,6 @@ public class RedissonConnection extends AbstractRedisConnection {
write(null, StringCodec.INSTANCE, RedisCommands.CONFIG_RESETSTAT);
}
private static final RedisStrictCommand<Long> TIME = new RedisStrictCommand<Long>("TIME", new TimeLongObjectDecoder());
@Override
public Long time() {
return read(null, LongCodec.INSTANCE, TIME);
}
@Override
public void killClient(String host, int port) {
throw new UnsupportedOperationException();
@ -2260,4 +2253,35 @@ public class RedissonConnection extends AbstractRedisConnection {
restore(key, ttlInMillis, serializedValue);
}
private static final RedisCommand<Set<byte[]>> ZREVRANGEBYLEX = new RedisCommand<>("ZREVRANGEBYLEX", new ObjectSetReplayDecoder<byte[]>());
@Override
public Set<byte[]> zRevRangeByLex(byte[] key, Range range, Limit limit) {
String min = value(range.getMin(), "-");
String max = value(range.getMax(), "+");
List<Object> args = new ArrayList<Object>();
args.add(key);
args.add(max);
args.add(min);
if (!limit.isUnlimited()) {
args.add("LIMIT");
args.add(limit.getOffset());
args.add(limit.getCount());
}
return read(key, ByteArrayCodec.INSTANCE, ZREVRANGEBYLEX, args.toArray());
}
private static final RedisStrictCommand<Long> ZLEXCOUNT = new RedisStrictCommand<>("ZLEXCOUNT");
@Override
public Long zLexCount(byte[] key, Range range) {
String min = value(range.getMin(), "-");
String max = value(range.getMax(), "+");
return read(key, StringCodec.INSTANCE, ZLEXCOUNT, key, min, max);
}
}

@ -1790,13 +1790,6 @@ public class RedissonConnection extends AbstractRedisConnection {
write(null, StringCodec.INSTANCE, RedisCommands.CONFIG_RESETSTAT);
}
private static final RedisStrictCommand<Long> TIME = new RedisStrictCommand<Long>("TIME", new TimeLongObjectDecoder());
@Override
public Long time() {
return read(null, LongCodec.INSTANCE, TIME);
}
@Override
public void killClient(String host, int port) {
throw new UnsupportedOperationException();
@ -2299,4 +2292,56 @@ public class RedissonConnection extends AbstractRedisConnection {
restore(key, ttlInMillis, serializedValue);
}
private static final RedisCommand<Set<byte[]>> ZREVRANGEBYLEX = new RedisCommand<>("ZREVRANGEBYLEX", new ObjectSetReplayDecoder<byte[]>());
@Override
public Set<byte[]> zRevRangeByLex(byte[] key, Range range, Limit limit) {
String min = value(range.getMin(), "-");
String max = value(range.getMax(), "+");
List<Object> args = new ArrayList<Object>();
args.add(key);
args.add(max);
args.add(min);
if (!limit.isUnlimited()) {
args.add("LIMIT");
args.add(limit.getOffset());
args.add(limit.getCount());
}
return read(key, ByteArrayCodec.INSTANCE, ZREVRANGEBYLEX, args.toArray());
}
@Override
public Long time(TimeUnit timeUnit) {
return read(null, LongCodec.INSTANCE, new RedisStrictCommand<>("TIME", new TimeLongObjectDecoder(timeUnit)));
}
private static final RedisStrictCommand<Long> ZREMRANGEBYLEX = new RedisStrictCommand<>("ZREMRANGEBYLEX");
@Override
public Long zRemRangeByLex(byte[] key, Range range) {
String min = value(range.getMin(), "-");
String max = value(range.getMax(), "+");
return write(key, StringCodec.INSTANCE, ZREMRANGEBYLEX, key, min, max);
}
private static final RedisStrictCommand<Long> ZLEXCOUNT = new RedisStrictCommand<>("ZLEXCOUNT");
@Override
public Long zLexCount(byte[] key, Range range) {
String min = value(range.getMin(), "-");
String max = value(range.getMax(), "+");
return read(key, StringCodec.INSTANCE, ZLEXCOUNT, key, min, max);
}
@Override
public void rewriteConfig() {
write(null, StringCodec.INSTANCE, RedisCommands.CONFIG_REWRITE);
}
}

@ -1795,13 +1795,6 @@ public class RedissonConnection extends AbstractRedisConnection {
write(null, StringCodec.INSTANCE, RedisCommands.CONFIG_RESETSTAT);
}
private static final RedisStrictCommand<Long> TIME = new RedisStrictCommand<Long>("TIME", new TimeLongObjectDecoder());
@Override
public Long time() {
return read(null, LongCodec.INSTANCE, TIME);
}
@Override
public void killClient(String host, int port) {
throw new UnsupportedOperationException();
@ -2756,4 +2749,55 @@ public class RedissonConnection extends AbstractRedisConnection {
return write(key, ByteArrayCodec.INSTANCE, GETDEL, key);
}
private static final RedisCommand<Set<byte[]>> ZREVRANGEBYLEX = new RedisCommand<>("ZREVRANGEBYLEX", new ObjectSetReplayDecoder<byte[]>());
@Override
public Set<byte[]> zRevRangeByLex(byte[] key, Range range, Limit limit) {
String min = value(range.getMin(), "-");
String max = value(range.getMax(), "+");
List<Object> args = new ArrayList<Object>();
args.add(key);
args.add(max);
args.add(min);
if (!limit.isUnlimited()) {
args.add("LIMIT");
args.add(limit.getOffset());
args.add(limit.getCount());
}
return read(key, ByteArrayCodec.INSTANCE, ZREVRANGEBYLEX, args.toArray());
}
@Override
public Long time(TimeUnit timeUnit) {
return read(null, LongCodec.INSTANCE, new RedisStrictCommand<>("TIME", new TimeLongObjectDecoder(timeUnit)));
}
private static final RedisStrictCommand<Long> ZREMRANGEBYLEX = new RedisStrictCommand<>("ZREMRANGEBYLEX");
@Override
public Long zRemRangeByLex(byte[] key, Range range) {
String min = value(range.getMin(), "-");
String max = value(range.getMax(), "+");
return write(key, StringCodec.INSTANCE, ZREMRANGEBYLEX, key, min, max);
}
private static final RedisStrictCommand<Long> ZLEXCOUNT = new RedisStrictCommand<>("ZLEXCOUNT");
@Override
public Long zLexCount(byte[] key, Range range) {
String min = value(range.getMin(), "-");
String max = value(range.getMax(), "+");
return read(key, StringCodec.INSTANCE, ZLEXCOUNT, key, min, max);
}
@Override
public void rewriteConfig() {
write(null, StringCodec.INSTANCE, RedisCommands.CONFIG_REWRITE);
}
}

@ -1795,13 +1795,6 @@ public class RedissonConnection extends AbstractRedisConnection {
write(null, StringCodec.INSTANCE, RedisCommands.CONFIG_RESETSTAT);
}
private static final RedisStrictCommand<Long> TIME = new RedisStrictCommand<Long>("TIME", new TimeLongObjectDecoder());
@Override
public Long time() {
return read(null, LongCodec.INSTANCE, TIME);
}
@Override
public void killClient(String host, int port) {
throw new UnsupportedOperationException();
@ -2756,4 +2749,65 @@ public class RedissonConnection extends AbstractRedisConnection {
return write(key, ByteArrayCodec.INSTANCE, GETDEL, key);
}
private static final RedisCommand<Set<byte[]>> ZREVRANGEBYLEX = new RedisCommand<>("ZREVRANGEBYLEX", new ObjectSetReplayDecoder<byte[]>());
@Override
public Set<byte[]> zRevRangeByLex(byte[] key, Range range, Limit limit) {
String min = value(range.getMin(), "-");
String max = value(range.getMax(), "+");
List<Object> args = new ArrayList<Object>();
args.add(key);
args.add(max);
args.add(min);
if (!limit.isUnlimited()) {
args.add("LIMIT");
args.add(limit.getOffset());
args.add(limit.getCount());
}
return read(key, ByteArrayCodec.INSTANCE, ZREVRANGEBYLEX, args.toArray());
}
@Override
public Long time(TimeUnit timeUnit) {
return read(null, LongCodec.INSTANCE, new RedisStrictCommand<>("TIME", new TimeLongObjectDecoder(timeUnit)));
}
private static final RedisStrictCommand<Long> ZREMRANGEBYLEX = new RedisStrictCommand<>("ZREMRANGEBYLEX");
@Override
public Long zRemRangeByLex(byte[] key, Range range) {
String min = value(range.getMin(), "-");
String max = value(range.getMax(), "+");
return write(key, StringCodec.INSTANCE, ZREMRANGEBYLEX, key, min, max);
}
private static final RedisStrictCommand<Long> ZLEXCOUNT = new RedisStrictCommand<>("ZLEXCOUNT");
@Override
public Long zLexCount(byte[] key, Range range) {
String min = value(range.getMin(), "-");
String max = value(range.getMax(), "+");
return read(key, StringCodec.INSTANCE, ZLEXCOUNT, key, min, max);
}
@Override
public void rewriteConfig() {
write(null, StringCodec.INSTANCE, RedisCommands.CONFIG_REWRITE);
}
@Override
public void flushDb(FlushOption option) {
write(null, StringCodec.INSTANCE, RedisCommands.FLUSHDB, option.toString());
}
@Override
public void flushAll(FlushOption option) {
write(null, StringCodec.INSTANCE, RedisCommands.FLUSHALL, option.toString());
}
}

@ -52,7 +52,6 @@ import org.springframework.data.redis.domain.geo.RadiusShape;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
import org.springframework.util.ReflectionUtils;
import org.springframework.data.domain.Range;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
@ -1721,13 +1720,6 @@ public class RedissonConnection extends AbstractRedisConnection {
write(null, StringCodec.INSTANCE, RedisCommands.CONFIG_RESETSTAT);
}
private static final RedisStrictCommand<Long> TIME = new RedisStrictCommand<Long>("TIME", new TimeLongObjectDecoder());
@Override
public Long time() {
return read(null, LongCodec.INSTANCE, TIME);
}
@Override
public void killClient(String host, int port) {
throw new UnsupportedOperationException();
@ -2682,6 +2674,172 @@ public class RedissonConnection extends AbstractRedisConnection {
return write(key, ByteArrayCodec.INSTANCE, GETDEL, key);
}
private static final RedisCommand<Set<byte[]>> ZREVRANGEBYLEX = new RedisCommand<>("ZREVRANGEBYLEX", new ObjectSetReplayDecoder<byte[]>());
@Override
public Set<byte[]> zRevRangeByLex(byte[] key, org.springframework.data.domain.Range range, org.springframework.data.redis.connection.Limit limit) {
String min = value(range.getLowerBound(), "-");
String max = value(range.getUpperBound(), "+");
List<Object> args = new ArrayList<Object>();
args.add(key);
args.add(max);
args.add(min);
if (!limit.isUnlimited()) {
args.add("LIMIT");
args.add(limit.getOffset());
args.add(limit.getCount());
}
return read(key, ByteArrayCodec.INSTANCE, ZREVRANGEBYLEX, args.toArray());
}
@Override
public Long time(TimeUnit timeUnit) {
return read(null, LongCodec.INSTANCE, new RedisStrictCommand<>("TIME", new TimeLongObjectDecoder(timeUnit)));
}
private static final RedisStrictCommand<Long> ZREMRANGEBYLEX = new RedisStrictCommand<>("ZREMRANGEBYLEX");
@Override
public Long zRemRangeByLex(byte[] key, org.springframework.data.domain.Range range) {
String min = value(range.getLowerBound(), "-");
String max = value(range.getUpperBound(), "+");
return write(key, StringCodec.INSTANCE, ZREMRANGEBYLEX, key, min, max);
}
private static final RedisStrictCommand<Long> ZLEXCOUNT = new RedisStrictCommand<>("ZLEXCOUNT");
@Override
public Long zLexCount(byte[] key, org.springframework.data.domain.Range range) {
String min = value(range.getLowerBound(), "-");
String max = value(range.getUpperBound(), "+");
return read(key, StringCodec.INSTANCE, ZLEXCOUNT, key, min, max);
}
@Override
public void rewriteConfig() {
write(null, StringCodec.INSTANCE, RedisCommands.CONFIG_REWRITE);
}
public static final RedisCommand<Long> ZRANGESTORE = new RedisCommand<>("ZRANGESTORE");
@Override
public Long zRangeStoreByLex(byte[] dstKey, byte[] srcKey, org.springframework.data.domain.Range<byte[]> range, org.springframework.data.redis.connection.Limit limit) {
String max = value(range.getUpperBound(), "+");
String min = value(range.getLowerBound(), "-");
List<Object> args = new LinkedList<>();
args.add(dstKey);
args.add(srcKey);
args.add(min);
args.add(max);
args.add("BYLEX");
if (!limit.isUnlimited()) {
args.add("LIMIT");
args.add(limit.getOffset());
args.add(limit.getCount());
}
return write(srcKey, LongCodec.INSTANCE, ZRANGESTORE, args.toArray());
}
@Override
public Long zRangeStoreRevByLex(byte[] dstKey, byte[] srcKey, org.springframework.data.domain.Range<byte[]> range, org.springframework.data.redis.connection.Limit limit) {
String max = value(range.getUpperBound(), "+");
String min = value(range.getLowerBound(), "-");
List<Object> args = new LinkedList<>();
args.add(dstKey);
args.add(srcKey);
args.add(min);
args.add(max);
args.add("BYLEX");
args.add("REV");
if (!limit.isUnlimited()) {
args.add("LIMIT");
args.add(limit.getOffset());
args.add(limit.getCount());
}
return write(srcKey, LongCodec.INSTANCE, ZRANGESTORE, args.toArray());
}
@Override
public Long zRangeStoreByScore(byte[] dstKey, byte[] srcKey, org.springframework.data.domain.Range<? extends Number> range, org.springframework.data.redis.connection.Limit limit) {
String min = value(range.getLowerBound(), "-inf");
String max = value(range.getUpperBound(), "+inf");
List<Object> args = new LinkedList<>();
args.add(dstKey);
args.add(srcKey);
args.add(min);
args.add(max);
args.add("BYSCORE");
if (!limit.isUnlimited()) {
args.add("LIMIT");
args.add(limit.getOffset());
args.add(limit.getCount());
}
return write(srcKey, LongCodec.INSTANCE, ZRANGESTORE, args.toArray());
}
@Override
public Long zRangeStoreRevByScore(byte[] dstKey, byte[] srcKey, org.springframework.data.domain.Range<? extends Number> range, org.springframework.data.redis.connection.Limit limit) {
String min = value(range.getLowerBound(), "-inf");
String max = value(range.getUpperBound(), "+inf");
List<Object> args = new LinkedList<>();
args.add(dstKey);
args.add(srcKey);
args.add(min);
args.add(max);
args.add("BYSCORE");
args.add("REV");
if (!limit.isUnlimited()) {
args.add("LIMIT");
args.add(limit.getOffset());
args.add(limit.getCount());
}
return write(srcKey, LongCodec.INSTANCE, ZRANGESTORE, args.toArray());
}
@Override
public void flushDb(FlushOption option) {
write(null, StringCodec.INSTANCE, RedisCommands.FLUSHDB, option.toString());
}
@Override
public void flushAll(FlushOption option) {
write(null, StringCodec.INSTANCE, RedisCommands.FLUSHALL, option.toString());
}
private static final RedisStrictCommand<Void> REPLICAOF = new RedisStrictCommand<>("REPLICAOF");
@Override
public void replicaOf(String host, int port) {
write(null, StringCodec.INSTANCE, REPLICAOF, host, port);
}
@Override
public void replicaOfNoOne() {
write(null, StringCodec.INSTANCE, REPLICAOF, "NO", "ONE");
}
@Override
public org.springframework.data.redis.connection.RedisCommands commands() {
return this;

@ -52,7 +52,6 @@ import org.springframework.data.redis.domain.geo.RadiusShape;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
import org.springframework.util.ReflectionUtils;
import org.springframework.data.domain.Range;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
@ -1721,13 +1720,6 @@ public class RedissonConnection extends AbstractRedisConnection {
write(null, StringCodec.INSTANCE, RedisCommands.CONFIG_RESETSTAT);
}
private static final RedisStrictCommand<Long> TIME = new RedisStrictCommand<Long>("TIME", new TimeLongObjectDecoder());
@Override
public Long time() {
return read(null, LongCodec.INSTANCE, TIME);
}
@Override
public void killClient(String host, int port) {
throw new UnsupportedOperationException();
@ -2682,6 +2674,173 @@ public class RedissonConnection extends AbstractRedisConnection {
return write(key, ByteArrayCodec.INSTANCE, GETDEL, key);
}
private static final RedisCommand<Set<byte[]>> ZREVRANGEBYLEX = new RedisCommand<>("ZREVRANGEBYLEX", new ObjectSetReplayDecoder<byte[]>());
@Override
public Set<byte[]> zRevRangeByLex(byte[] key, org.springframework.data.domain.Range range, org.springframework.data.redis.connection.Limit limit) {
String min = value(range.getLowerBound(), "-");
String max = value(range.getUpperBound(), "+");
List<Object> args = new ArrayList<Object>();
args.add(key);
args.add(max);
args.add(min);
if (!limit.isUnlimited()) {
args.add("LIMIT");
args.add(limit.getOffset());
args.add(limit.getCount());
}
return read(key, ByteArrayCodec.INSTANCE, ZREVRANGEBYLEX, args.toArray());
}
@Override
public Long time(TimeUnit timeUnit) {
return read(null, LongCodec.INSTANCE, new RedisStrictCommand<>("TIME", new TimeLongObjectDecoder(timeUnit)));
}
private static final RedisStrictCommand<Long> ZREMRANGEBYLEX = new RedisStrictCommand<>("ZREMRANGEBYLEX");
@Override
public Long zRemRangeByLex(byte[] key, org.springframework.data.domain.Range range) {
String min = value(range.getLowerBound(), "-");
String max = value(range.getUpperBound(), "+");
return write(key, StringCodec.INSTANCE, ZREMRANGEBYLEX, key, min, max);
}
private static final RedisStrictCommand<Long> ZLEXCOUNT = new RedisStrictCommand<>("ZLEXCOUNT");
@Override
public Long zLexCount(byte[] key, org.springframework.data.domain.Range range) {
String min = value(range.getLowerBound(), "-");
String max = value(range.getUpperBound(), "+");
return read(key, StringCodec.INSTANCE, ZLEXCOUNT, key, min, max);
}
@Override
public void rewriteConfig() {
write(null, StringCodec.INSTANCE, RedisCommands.CONFIG_REWRITE);
}
public static final RedisCommand<Long> ZRANGESTORE = new RedisCommand<>("ZRANGESTORE");
@Override
public Long zRangeStoreByLex(byte[] dstKey, byte[] srcKey, org.springframework.data.domain.Range<byte[]> range, org.springframework.data.redis.connection.Limit limit) {
String max = value(range.getUpperBound(), "+");
String min = value(range.getLowerBound(), "-");
List<Object> args = new LinkedList<>();
args.add(dstKey);
args.add(srcKey);
args.add(min);
args.add(max);
args.add("BYLEX");
if (!limit.isUnlimited()) {
args.add("LIMIT");
args.add(limit.getOffset());
args.add(limit.getCount());
}
return write(srcKey, LongCodec.INSTANCE, ZRANGESTORE, args.toArray());
}
@Override
public Long zRangeStoreRevByLex(byte[] dstKey, byte[] srcKey, org.springframework.data.domain.Range<byte[]> range, org.springframework.data.redis.connection.Limit limit) {
String max = value(range.getUpperBound(), "+");
String min = value(range.getLowerBound(), "-");
List<Object> args = new LinkedList<>();
args.add(dstKey);
args.add(srcKey);
args.add(min);
args.add(max);
args.add("BYLEX");
args.add("REV");
if (!limit.isUnlimited()) {
args.add("LIMIT");
args.add(limit.getOffset());
args.add(limit.getCount());
}
return write(srcKey, LongCodec.INSTANCE, ZRANGESTORE, args.toArray());
}
@Override
public Long zRangeStoreByScore(byte[] dstKey, byte[] srcKey, org.springframework.data.domain.Range<? extends Number> range, org.springframework.data.redis.connection.Limit limit) {
String min = value(range.getLowerBound(), "-inf");
String max = value(range.getUpperBound(), "+inf");
List<Object> args = new LinkedList<>();
args.add(dstKey);
args.add(srcKey);
args.add(min);
args.add(max);
args.add("BYSCORE");
if (!limit.isUnlimited()) {
args.add("LIMIT");
args.add(limit.getOffset());
args.add(limit.getCount());
}
return write(srcKey, LongCodec.INSTANCE, ZRANGESTORE, args.toArray());
}
@Override
public Long zRangeStoreRevByScore(byte[] dstKey, byte[] srcKey, org.springframework.data.domain.Range<? extends Number> range, org.springframework.data.redis.connection.Limit limit) {
String min = value(range.getLowerBound(), "-inf");
String max = value(range.getUpperBound(), "+inf");
List<Object> args = new LinkedList<>();
args.add(dstKey);
args.add(srcKey);
args.add(min);
args.add(max);
args.add("BYSCORE");
args.add("REV");
if (!limit.isUnlimited()) {
args.add("LIMIT");
args.add(limit.getOffset());
args.add(limit.getCount());
}
return write(srcKey, LongCodec.INSTANCE, ZRANGESTORE, args.toArray());
}
@Override
public void flushDb(FlushOption option) {
write(null, StringCodec.INSTANCE, RedisCommands.FLUSHDB, option.toString());
}
@Override
public void flushAll(FlushOption option) {
write(null, StringCodec.INSTANCE, RedisCommands.FLUSHALL, option.toString());
}
private static final RedisStrictCommand<Void> REPLICAOF = new RedisStrictCommand<>("REPLICAOF");
@Override
public void replicaOf(String host, int port) {
write(null, StringCodec.INSTANCE, REPLICAOF, host, port);
}
@Override
public void replicaOfNoOne() {
write(null, StringCodec.INSTANCE, REPLICAOF, "NO", "ONE");
}
@Override
public org.springframework.data.redis.connection.RedisCommands commands() {
return this;

@ -3,17 +3,16 @@ package org.redisson.spring.data.connection;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Test;
import org.springframework.data.domain.Range;
import org.springframework.data.geo.Circle;
import org.springframework.data.geo.GeoResults;
import org.springframework.data.geo.Point;
import org.springframework.data.redis.connection.Limit;
import org.springframework.data.redis.connection.RedisGeoCommands;
import org.springframework.data.redis.connection.RedisStringCommands.SetOption;
import org.springframework.data.redis.connection.RedisZSetCommands;
import org.springframework.data.redis.connection.zset.Tuple;
import org.springframework.data.redis.core.Cursor;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ScanOptions;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.core.types.Expiration;
import java.util.List;
@ -22,6 +21,50 @@ import java.util.Set;
public class RedissonConnectionTest extends BaseConnectionTest {
@Test
public void testZLexCount() {
StringRedisTemplate redisTemplate = new StringRedisTemplate();
redisTemplate.setConnectionFactory(new RedissonConnectionFactory(redisson));
redisTemplate.afterPropertiesSet();
redisTemplate.boundZSetOps("test").add("1", 10);
redisTemplate.boundZSetOps("test").add("2", 20);
redisTemplate.boundZSetOps("test").add("3", 30);
Long size = redisTemplate.boundZSetOps("test").lexCount(Range.closed("1", "2"));
assertThat(size).isEqualTo(2);
}
@Test
public void testZRemLexByRange() {
StringRedisTemplate redisTemplate = new StringRedisTemplate();
redisTemplate.setConnectionFactory(new RedissonConnectionFactory(redisson));
redisTemplate.afterPropertiesSet();
redisTemplate.boundZSetOps("test").add("1", 10);
redisTemplate.boundZSetOps("test").add("2", 20);
redisTemplate.boundZSetOps("test").add("3", 30);
Long size = redisTemplate.boundZSetOps("test")
.removeRangeByLex(Range.closed("1", "2"));
assertThat(size).isEqualTo(2);
}
@Test
public void testReverseRangeByLex() {
StringRedisTemplate redisTemplate = new StringRedisTemplate();
redisTemplate.setConnectionFactory(new RedissonConnectionFactory(redisson));
redisTemplate.afterPropertiesSet();
redisTemplate.boundZSetOps("test").add("1", 10);
redisTemplate.boundZSetOps("test").add("2", 20);
Set<String> ops = redisTemplate.boundZSetOps("test")
.reverseRangeByLex(Range.closed("1", "2")
, Limit.limit().count(10));
assertThat(ops.size()).isEqualTo(2);
}
@Test
public void testExecute() {
Long s = (Long) connection.execute("ttl", "key".getBytes());

@ -698,6 +698,7 @@ public interface RedisCommands {
RedisStrictCommand<Map<String, String>> CONFIG_GET_MAP = new RedisStrictCommand<>("CONFIG", "GET", new ObjectMapReplayDecoder());
RedisStrictCommand<Void> CONFIG_SET = new RedisStrictCommand<Void>("CONFIG", "SET", new VoidReplayConvertor());
RedisStrictCommand<Void> CONFIG_RESETSTAT = new RedisStrictCommand<Void>("CONFIG", "RESETSTAT", new VoidReplayConvertor());
RedisStrictCommand<Void> CONFIG_REWRITE = new RedisStrictCommand<>("CONFIG", "REWRITE", new VoidReplayConvertor());
RedisStrictCommand<List<String>> CLIENT_LIST = new RedisStrictCommand<List<String>>("CLIENT", "LIST", new StringToListConvertor());
RedisStrictCommand<Map<String, String>> INFO_ALL = new RedisStrictCommand<Map<String, String>>("INFO", "ALL", new StringMapDataDecoder());

@ -18,6 +18,7 @@ package org.redisson.client.protocol.decoder;
import org.redisson.client.handler.State;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
*
@ -27,9 +28,23 @@ import java.util.List;
public class TimeLongObjectDecoder implements MultiDecoder<Long> {
private final TimeUnit timeUnit;
public TimeLongObjectDecoder() {
this(null);
}
public TimeLongObjectDecoder(TimeUnit timeUnit) {
this.timeUnit = timeUnit;
}
@Override
public Long decode(List<Object> parts, State state) {
return ((Long) parts.get(0)) * 1000L + ((Long) parts.get(1)) / 1000L;
long time = ((Long) parts.get(0)) * 1000L + ((Long) parts.get(1)) / 1000L;
if (timeUnit != null) {
return timeUnit.convert(time, TimeUnit.MILLISECONDS);
}
return time;
}
}

Loading…
Cancel
Save