package com.appgree.core.redis.provider; import java.util.List; import java.util.Map; import java.util.Set; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.Pipeline; import redis.clients.jedis.Response; import redis.clients.jedis.SortingParams; import redis.clients.jedis.Tuple; import redis.clients.jedis.ZParams; import com.appgree.core.redis.domain.CacheKey; /** * The Class RedisRemotePipelinedProvider. */ public class RedisRemotePipelinedProvider extends RedisRemoteBaseProvider implements RedisProvider, RedisSentinelNotifiable { /** * Instantiates a new redis remote pipelined provider. * * @throws Exception the exception */ public RedisRemotePipelinedProvider() throws Exception { super(); } /** The current jedis. */ private static ThreadLocal<Jedis> currentJedis = new ThreadLocal<Jedis>(); /** The current pipeline. */ private static ThreadLocal<Pipeline> currentPipeline = new ThreadLocal<Pipeline>(); /** * opens a new pipeline. */ public void openPipeline() { if (currentPipeline.get() != null) { return; } Jedis jedis = currentJedis.get(); if (jedis == null) { jedis = super.openJedis(); currentJedis.set(jedis); } currentPipeline.set(jedis.pipelined()); } /** * Returns a broken object to the pool. */ public void returnBrokenPipeline() { currentPipeline.set(null); Jedis jedis = currentJedis.get(); if (jedis == null) { return; } currentJedis.set(null); jedis.close(); } /** * syncs the pipeline. */ public void syncPipeline() { Pipeline pipeline = currentPipeline.get(); if (pipeline == null) { return; } pipeline.sync(); currentPipeline.set(null); Jedis jedis = currentJedis.get(); if (jedis == null) { return; } jedis.close(); currentJedis.set(null); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisRemoteBaseProvider#poolChanged(redis.clients.jedis.JedisPool) */ @Override public void poolChanged(JedisPool pool) { super.poolChanged(pool); // removes all old references currentPipeline = new ThreadLocal<Pipeline>(); currentJedis = new ThreadLocal<Jedis>(); } // redis functions /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#set(dw.cache.provider.CacheKey, java.lang.String, java.lang.String) */ @Override public RedisValue<String> set(CacheKey cacheKey, String key, String value) { return (new RedisValue<String>()).setResponse(currentPipeline.get().set(key, value)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#get(dw.cache.provider.CacheKey, java.lang.String) */ @Override public RedisValue<String> get(CacheKey cacheKey, String key) { return (new RedisValue<String>()).setResponse(currentPipeline.get().get(key)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#getSet(dw.cache.provider.CacheKey, java.lang.String, java.lang.String) */ @Override public RedisValue<String> getSet(CacheKey cacheKey, String key, String value) { return (new RedisValue<String>()).setResponse(currentPipeline.get().getSet(key, value)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#hkeys(dw.cache.provider.CacheKey, java.lang.String) */ @Override public RedisValue<Set<String>> hkeys(CacheKey cacheKey, String key) { return (new RedisValue<Set<String>>()).setResponse(currentPipeline.get().hkeys(key)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#hvals(dw.cache.provider.CacheKey, java.lang.String) */ @Override public RedisValue<List<String>> hvals(CacheKey cacheKey, String key) { return (new RedisValue<List<String>>()).setResponse(currentPipeline.get().hvals(key)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#hset(dw.cache.provider.CacheKey, java.lang.String, java.lang.String, java.lang.String) */ @Override public RedisValue<Long> hset(CacheKey cacheKey, String key, String field, String value) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().hset(key, field, value)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#hdel(dw.cache.provider.CacheKey, java.lang.String, java.lang.String) */ @Override public RedisValue<Long> hdel(CacheKey cacheKey, String key, String field) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().hdel(key, field)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#hmset(dw.cache.provider.CacheKey, java.lang.String, java.util.Map) */ @Override public RedisValue<String> hmset(CacheKey cacheKey, String key, Map<String, String> hash) { return (new RedisValue<String>()).setResponse(currentPipeline.get().hmset(key, hash)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#hget(dw.cache.provider.CacheKey, java.lang.String, java.lang.String) */ @Override public RedisValue<String> hget(CacheKey cacheKey, String key, String field) { return (new RedisValue<String>()).setResponse(currentPipeline.get().hget(key, field)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#hmget(dw.cache.provider.CacheKey, java.lang.String, java.lang.String[]) */ @Override public RedisValue<List<String>> hmget(CacheKey cacheKey, String key, String... fields) { return (new RedisValue<List<String>>()).setResponse(currentPipeline.get().hmget(key, fields)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#hgetAll(dw.cache.provider.CacheKey, java.lang.String) */ @Override public RedisValue<Map<String, String>> hgetAll(CacheKey cacheKey, String key) { return (new RedisValue<Map<String, String>>()).setResponse(currentPipeline.get().hgetAll(key)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#hincrBy(dw.cache.provider.CacheKey, java.lang.String, java.lang.String, int) */ @Override public RedisValue<Long> hincrBy(CacheKey cacheKey, String key, String field, int value) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().hincrBy(key, field, value)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#hexists(dw.cache.provider.CacheKey, java.lang.String, java.lang.String) */ @Override public RedisValue<Boolean> hexists(CacheKey cacheKey, String key, String field) { return (new RedisValue<Boolean>()).setResponse(currentPipeline.get().hexists(key, field)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#hlen(dw.cache.provider.CacheKey, java.lang.String) */ @Override public RedisValue<Long> hlen(CacheKey cacheKey, String key) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().hlen(key)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#ping(dw.cache.provider.CacheKey) */ @Override public RedisValue<String> ping(CacheKey cacheKey) { RedisValue<String> value = new RedisValue<String>(); Pipeline pipeLine = currentPipeline.get(); Response<String> resp = pipeLine.ping(); value.setResponse(resp); return value; } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#expire(dw.cache.provider.CacheKey, java.lang.String, int) */ @Override public RedisValue<Long> expire(CacheKey cacheKey, String key, int seconds) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().expire(key, seconds)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#keys(dw.cache.provider.CacheKey, java.lang.String) */ @Override public RedisValue<Set<String>> keys(CacheKey cacheKey, String pattern) { return (new RedisValue<Set<String>>()).setResponse(currentPipeline.get().keys(pattern)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#del(dw.cache.provider.CacheKey, java.lang.String[]) */ @Override public RedisValue<Long> del(CacheKey cacheKey, String... keys) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().del(keys)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#exists(dw.cache.provider.CacheKey, java.lang.String) */ @Override public RedisValue<Boolean> exists(CacheKey cacheKey, String key) { return (new RedisValue<Boolean>()).setResponse(currentPipeline.get().exists(key)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#incr(dw.cache.provider.CacheKey, java.lang.String) */ @Override public RedisValue<Long> incr(CacheKey cacheKey, String key) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().incr(key)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#decr(dw.cache.provider.CacheKey, java.lang.String) */ @Override public RedisValue<Long> decr(CacheKey cacheKey, String key) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().decr(key)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zadd(dw.cache.provider.CacheKey, java.lang.String, double, java.lang.String) */ @Override public RedisValue<Long> zadd(CacheKey cacheKey, String key, double score, String member) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().zadd(key, score, member)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zincrby(dw.cache.provider.CacheKey, java.lang.String, double, java.lang.String) */ @Override public RedisValue<Double> zincrby(CacheKey cacheKey, String key, double score, String member) { return (new RedisValue<Double>()).setResponse(currentPipeline.get().zincrby(key, score, member)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zscore(dw.cache.provider.CacheKey, java.lang.String, java.lang.String) */ @Override public RedisValue<Double> zscore(CacheKey cacheKey, String key, String member) { return (new RedisValue<Double>()).setResponse(currentPipeline.get().zscore(key, member)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zrank(dw.cache.provider.CacheKey, java.lang.String, java.lang.String) */ @Override public RedisValue<Long> zrank(CacheKey cacheKey, String key, String member) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().zrank(key, member)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zcount(dw.cache.provider.CacheKey, java.lang.String, double, double) */ @Override public RedisValue<Long> zcount(CacheKey cacheKey, String key, double min, double max) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().zcount(key, min, max)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zrevrank(dw.cache.provider.CacheKey, java.lang.String, java.lang.String) */ @Override public RedisValue<Long> zrevrank(CacheKey cacheKey, String key, String member) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().zrevrank(key, member)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zrem(dw.cache.provider.CacheKey, java.lang.String, java.lang.String) */ @Override public RedisValue<Long> zrem(CacheKey cacheKey, String key, String member) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().zrem(key, member)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zremrangeByRank(dw.cache.provider.CacheKey, java.lang.String, int, int) */ @Override public RedisValue<Long> zremrangeByRank(CacheKey cacheKey, String key, int start, int end) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().zremrangeByRank(key, start, end)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zcard(dw.cache.provider.CacheKey, java.lang.String) */ @Override public RedisValue<Long> zcard(CacheKey cacheKey, String key) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().zcard(key)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zrevrange(dw.cache.provider.CacheKey, java.lang.String, int, int) */ @Override public RedisValue<Set<String>> zrevrange(CacheKey cacheKey, String key, int start, int end) { return (new RedisValue<Set<String>>()).setResponse(currentPipeline.get().zrevrange(key, start, end)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zrevrangeByScore(dw.cache.provider.CacheKey, java.lang.String, double, double, int, int) */ @Override public RedisValue<Set<String>> zrevrangeByScore(CacheKey cacheKey, String key, double min, double max, int offset, int count) { return (new RedisValue<Set<String>>()).setResponse(currentPipeline.get().zrevrangeByScore(key, min, max, offset, count)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zrevrangeByScore(dw.cache.provider.CacheKey, java.lang.String, double, double) */ @Override public RedisValue<Set<String>> zrevrangeByScore(CacheKey cacheKey, String key, double min, double max) { return (new RedisValue<Set<String>>()).setResponse(currentPipeline.get().zrevrangeByScore(key, min, max)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zrange(dw.cache.provider.CacheKey, java.lang.String, int, int) */ @Override public RedisValue<Set<String>> zrange(CacheKey cacheKey, String key, int start, int end) { return (new RedisValue<Set<String>>()).setResponse(currentPipeline.get().zrange(key, start, end)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zrangeWithScores(dw.cache.provider.CacheKey, java.lang.String, int, int) */ @Override public RedisValue<Set<Tuple>> zrangeWithScores(CacheKey cacheKey, String key, int start, int end) { return (new RedisValue<Set<Tuple>>()).setResponse(currentPipeline.get().zrangeWithScores(key, start, end)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zrangeByScore(dw.cache.provider.CacheKey, java.lang.String, double, double, int, int) */ @Override public RedisValue<Set<String>> zrangeByScore(CacheKey cacheKey, String key, double min, double max, int offset, int count) { return (new RedisValue<Set<String>>()).setResponse(currentPipeline.get().zrangeByScore(key, min, max, offset, count)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zrangeByScoreWithScores(dw.cache.provider.CacheKey, java.lang.String, double, double, int, int) */ @Override public RedisValue<Set<Tuple>> zrangeByScoreWithScores(CacheKey cacheKey, String key, double min, double max, int offset, int count) { return (new RedisValue<Set<Tuple>>()).setResponse(currentPipeline.get().zrangeByScoreWithScores(key, min, max, offset, count)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zrevrangeByScoreWithScores(dw.cache.provider.CacheKey, java.lang.String, double, double, int, int) */ @Override public RedisValue<Set<Tuple>> zrevrangeByScoreWithScores(CacheKey cacheKey, String key, double max, double min, int offset, int count) { return (new RedisValue<Set<Tuple>>()).setResponse(currentPipeline.get().zrevrangeByScoreWithScores(key, max, min, offset, count)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zinterstore(dw.cache.provider.CacheKey, java.lang.String, redis.clients.jedis.ZParams, * java.lang.String[]) */ @Override public RedisValue<Long> zinterstore(CacheKey cacheKey, String dstkey, ZParams params, String... sets) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().zinterstore(dstkey, params, sets)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#zrangeByScore(dw.cache.provider.CacheKey, java.lang.String, double, double) */ @Override public RedisValue<Set<String>> zrangeByScore(CacheKey cacheKey, String key, double min, double max) { return (new RedisValue<Set<String>>()).setResponse(currentPipeline.get().zrangeByScore(key, min, max)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#mget(dw.cache.provider.CacheKey, java.lang.String[]) */ @Override public RedisValue<List<String>> mget(CacheKey cacheKey, String... keys) { return (new RedisValue<List<String>>()).setResponse(currentPipeline.get().mget(keys)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#rpush(dw.cache.provider.CacheKey, java.lang.String, java.lang.String[]) */ @Override public RedisValue<Long> rpush(CacheKey cacheKey, String key, String... values) { Response<Long> res = new Response<Long>(null); for (String value : values) { res = currentPipeline.get().rpush(key, value); } return (new RedisValue<Long>()).setResponse(res); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#rpoplpush(dw.cache.provider.CacheKey, java.lang.String, java.lang.String) */ @Override public RedisValue<String> rpoplpush(CacheKey cacheKey, String srckey, String dstkey) { return (new RedisValue<String>()).setResponse(currentPipeline.get().rpoplpush(srckey, dstkey)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#lpush(dw.cache.provider.CacheKey, java.lang.String, java.lang.String[]) */ @Override public RedisValue<Long> lpush(CacheKey cacheKey, String key, String... values) { Response<Long> res = new Response<Long>(null); for (String value : values) { res = currentPipeline.get().lpush(key, value); } return (new RedisValue<Long>()).setResponse(res); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#lpop(dw.cache.provider.CacheKey, java.lang.String) */ @Override public RedisValue<String> lpop(CacheKey cacheKey, String key) { return (new RedisValue<String>()).setResponse(currentPipeline.get().lpop(key)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#brpop(dw.cache.provider.CacheKey, int, java.lang.String) */ @Override public RedisValue<List<String>> brpop(CacheKey cacheKey, int secondsBlock, String key) { // there is no way to simulate a blocking operation nor caching or pipelining throw new UnsupportedOperationException(); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#blpop(dw.cache.provider.CacheKey, int, java.lang.String) */ @Override public RedisValue<List<String>> blpop(CacheKey cacheKey, int secondsBlock, String key) { // there is no way to simulate a blocking operation nor caching or pipelining throw new UnsupportedOperationException(); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#lset(dw.cache.provider.CacheKey, java.lang.String, int, java.lang.String) */ @Override public RedisValue<String> lset(CacheKey cacheKey, String key, int index, String value) { return (new RedisValue<String>()).setResponse(currentPipeline.get().lset(key, index, value)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#lrange(dw.cache.provider.CacheKey, java.lang.String, int, int) */ @Override public RedisValue<List<String>> lrange(CacheKey cacheKey, String key, int start, int end) { return (new RedisValue<List<String>>()).setResponse(currentPipeline.get().lrange(key, start, end)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#lindex(dw.cache.provider.CacheKey, java.lang.String, int) */ @Override public RedisValue<String> lindex(CacheKey cacheKey, String key, int index) { return (new RedisValue<String>()).setResponse(currentPipeline.get().lindex(key, index)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#lrem(dw.cache.provider.CacheKey, java.lang.String, int, java.lang.String) */ @Override public RedisValue<Long> lrem(CacheKey cacheKey, String key, int count, String value) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().lrem(key, count, value)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#llen(dw.cache.provider.CacheKey, java.lang.String) */ @Override public RedisValue<Long> llen(CacheKey cacheKey, String key) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().llen(key)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#ltrim(dw.cache.provider.CacheKey, java.lang.String, int, int) */ @Override public RedisValue<String> ltrim(CacheKey cacheKey, String key, int start, int end) { return (new RedisValue<String>()).setResponse(currentPipeline.get().ltrim(key, start, end)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#sadd(dw.cache.provider.CacheKey, java.lang.String, java.lang.String[]) */ @Override public RedisValue<Long> sadd(CacheKey cacheKey, String key, String... members) { Response<Long> res = new Response<Long>(null); for (String member : members) { res = currentPipeline.get().sadd(key, member); } return (new RedisValue<Long>()).setResponse(res); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#srem(dw.cache.provider.CacheKey, java.lang.String, java.lang.String[]) */ @Override public RedisValue<Long> srem(CacheKey cacheKey, String key, String... members) { Response<Long> res = new Response<Long>(null); for (String member : members) { res = currentPipeline.get().srem(key, member); } return (new RedisValue<Long>()).setResponse(res); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#sismember(dw.cache.provider.CacheKey, java.lang.String, java.lang.String) */ @Override public RedisValue<Boolean> sismember(CacheKey cacheKey, String key, String member) { return (new RedisValue<Boolean>()).setResponse(currentPipeline.get().sismember(key, member)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#smembers(dw.cache.provider.CacheKey, java.lang.String) */ @Override public RedisValue<Set<String>> smembers(CacheKey cacheKey, String key) { return (new RedisValue<Set<String>>()).setResponse(currentPipeline.get().smembers(key)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#scard(dw.cache.provider.CacheKey, java.lang.String) */ @Override public RedisValue<Long> scard(CacheKey cacheKey, String key) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().scard(key)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#sinterstore(dw.cache.provider.CacheKey, java.lang.String, java.lang.String[]) */ @Override public RedisValue<Long> sinterstore(CacheKey cacheKey, String dstkey, String... sets) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().sinterstore(dstkey, sets)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#sinter(dw.cache.provider.CacheKey, java.lang.String[]) */ @Override public RedisValue<Set<String>> sinter(CacheKey cacheKey, String... sets) { return (new RedisValue<Set<String>>()).setResponse(currentPipeline.get().sinter(sets)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#sunionstore(dw.cache.provider.CacheKey, java.lang.String, java.lang.String[]) */ @Override public RedisValue<Long> sunionstore(CacheKey cacheKey, String dstkey, String... sets) { return (new RedisValue<Long>()).setResponse(currentPipeline.get().sunionstore(dstkey, sets)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#sunion(dw.cache.provider.CacheKey, java.lang.String[]) */ @Override public RedisValue<Set<String>> sunion(CacheKey cacheKey, String... sets) { return (new RedisValue<Set<String>>()).setResponse(currentPipeline.get().sunion(sets)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#sort(dw.cache.provider.CacheKey, java.lang.String, redis.clients.jedis.SortingParams) */ @Override public RedisValue<List<String>> sort(CacheKey cacheKey, String key, SortingParams sortingParameters) { return (new RedisValue<List<String>>()).setResponse(currentPipeline.get().sort(key, sortingParameters)); } /* * (non-Javadoc) * * @see dw.core.redis.provider.RedisProvider#evalsha(dw.cache.provider.CacheKey, java.lang.String, java.util.List, java.util.List) */ @Override public RedisValue<Object> evalsha(CacheKey cacheKey, String sha1, List<String> keys, List<String> args) { throw new UnsupportedOperationException(); } }