@Override public V index(K key, long index) { return execute(new ValueDeserializingRedisCallback(key) { @Override protected byte[] inRedis(byte[] rawKey, RedisConnection connection) { return connection.lIndex(rawKey, index); } }, true); }
@Override public V rightPop(K key) { return execute(new ValueDeserializingRedisCallback(key) { @Override protected byte[] inRedis(byte[] rawKey, RedisConnection connection) { return connection.rPop(rawKey); } }, true); }
@Override public void trim(K key, long start, long end) { execute(new ValueDeserializingRedisCallback(key) { @Override protected byte[] inRedis(byte[] rawKey, RedisConnection connection) { connection.lTrim(rawKey, start, end); return null; } }, true); } }
@Override public V leftPop(K key) { return execute(new ValueDeserializingRedisCallback(key) { @Override protected byte[] inRedis(byte[] rawKey, RedisConnection connection) { return connection.lPop(rawKey); } }, true); }
@Override public V leftPop(K key, long timeout, TimeUnit unit) { int tm = (int) TimeoutUtils.toSeconds(timeout, unit); return execute(new ValueDeserializingRedisCallback(key) { @Override protected byte[] inRedis(byte[] rawKey, RedisConnection connection) { List<byte[]> lPop = connection.bLPop(tm, rawKey); return (CollectionUtils.isEmpty(lPop) ? null : lPop.get(1)); } }, true); }
@Override public V rightPopAndLeftPush(K sourceKey, K destinationKey) { byte[] rawDestKey = rawKey(destinationKey); return execute(new ValueDeserializingRedisCallback(sourceKey) { @Override protected byte[] inRedis(byte[] rawSourceKey, RedisConnection connection) { return connection.rPopLPush(rawSourceKey, rawDestKey); } }, true); }
@Override public void set(K key, long index, V value) { byte[] rawValue = rawValue(value); execute(new ValueDeserializingRedisCallback(key) { @Override protected byte[] inRedis(byte[] rawKey, RedisConnection connection) { connection.lSet(rawKey, index, rawValue); return null; } }, true); }
@Override public V rightPopAndLeftPush(K sourceKey, K destinationKey, long timeout, TimeUnit unit) { int tm = (int) TimeoutUtils.toSeconds(timeout, unit); byte[] rawDestKey = rawKey(destinationKey); return execute(new ValueDeserializingRedisCallback(sourceKey) { @Override protected byte[] inRedis(byte[] rawSourceKey, RedisConnection connection) { return connection.bRPopLPush(tm, rawSourceKey, rawDestKey); } }, true); }
@Override public Long size(K key) { byte[] rawKey = rawKey(key); return execute(connection -> connection.lLen(rawKey), true); }
@Override public Long leftPush(K key, V value) { byte[] rawKey = rawKey(key); byte[] rawValue = rawValue(value); return execute(connection -> connection.lPush(rawKey, rawValue), true); }
@Override public Long leftPushAll(K key, Collection<V> values) { byte[] rawKey = rawKey(key); byte[][] rawValues = rawValues(values); return execute(connection -> connection.lPush(rawKey, rawValues), true); }
@Override public List<V> range(K key, long start, long end) { byte[] rawKey = rawKey(key); return execute(connection -> deserializeValues(connection.lRange(rawKey, start, end)), true); }
@Override public Long remove(K key, long count, Object value) { byte[] rawKey = rawKey(key); byte[] rawValue = rawValue(value); return execute(connection -> connection.lRem(rawKey, count, rawValue), true); }
@Override public Long rightPushAll(K key, Collection<V> values) { byte[] rawKey = rawKey(key); byte[][] rawValues = rawValues(values); return execute(connection -> connection.rPush(rawKey, rawValues), true); }
@Override public Long rightPushIfPresent(K key, V value) { byte[] rawKey = rawKey(key); byte[] rawValue = rawValue(value); return execute(connection -> connection.rPushX(rawKey, rawValue), true); }
@Override public Long leftPushAll(K key, V... values) { byte[] rawKey = rawKey(key); byte[][] rawValues = rawValues(values); return execute(connection -> connection.lPush(rawKey, rawValues), true); }
@Override public Long leftPushIfPresent(K key, V value) { byte[] rawKey = rawKey(key); byte[] rawValue = rawValue(value); return execute(connection -> connection.lPushX(rawKey, rawValue), true); }
@Override public Long rightPush(K key, V value) { byte[] rawKey = rawKey(key); byte[] rawValue = rawValue(value); return execute(connection -> connection.rPush(rawKey, rawValue), true); }
@Override public Long rightPush(K key, V pivot, V value) { byte[] rawKey = rawKey(key); byte[] rawPivot = rawValue(pivot); byte[] rawValue = rawValue(value); return execute(connection -> connection.lInsert(rawKey, Position.AFTER, rawPivot, rawValue), true); }
@Override public Long leftPush(K key, V pivot, V value) { byte[] rawKey = rawKey(key); byte[] rawPivot = rawValue(pivot); byte[] rawValue = rawValue(value); return execute(connection -> connection.lInsert(rawKey, Position.BEFORE, rawPivot, rawValue), true); }