All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.trigonic.jedis.NamespaceJedis Maven / Gradle / Ivy

The newest version!
package com.trigonic.jedis;

import java.util.List;
import java.util.Map;
import java.util.Set;

import redis.clients.jedis.BinaryClient.LIST_POSITION;
import redis.clients.jedis.BinaryJedisPubSub;
import redis.clients.jedis.Client;
import redis.clients.jedis.DebugParams;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisMonitor;
import redis.clients.jedis.JedisPubSub;
import redis.clients.jedis.Pipeline;
import redis.clients.jedis.PipelineBlock;
import redis.clients.jedis.SortingParams;
import redis.clients.jedis.Transaction;
import redis.clients.jedis.TransactionBlock;
import redis.clients.jedis.Tuple;
import redis.clients.jedis.ZParams;

public class NamespaceJedis extends Jedis {
    private NamespaceHandler namespace;
    private Jedis wrapped;

    public NamespaceJedis(String namespace, Jedis jedis) {
        super((String) null);
        this.namespace = new NamespaceHandler(namespace);
        this.wrapped = jedis;
    }

    @Override
    public Long append(byte[] key, byte[] value) {
        return wrapped.append(namespace.add(key), value);
    }
    
    @Override
    public Long append(String key, String value) {
        return wrapped.append(namespace.add(key), value);
    }
    
    @Override
    public String auth(String password) {
        return wrapped.auth(password);
    }
    
    @Override
    public String bgrewriteaof() {
        return wrapped.bgrewriteaof();
    }
    
    @Override
    public String bgsave() {
        return wrapped.bgsave();
    }
    
    @Override
    public List blpop(int timeout, byte[]... keys) {
        return namespace.removeFirstBytes(wrapped.blpop(timeout, namespace.add(keys)));
    }
    
    @Override
    public List blpop(int timeout, String... keys) {
        return namespace.removeFirst(wrapped.blpop(timeout, namespace.add(keys)));
    }
    
    @Override
    public List brpop(int timeout, byte[]... keys) {
        return namespace.removeFirstBytes(wrapped.brpop(timeout, namespace.add(keys)));
    }
    
    @Override
    public List brpop(int timeout, String... keys) {
        return namespace.removeFirst(wrapped.brpop(timeout, namespace.add(keys)));
    }
    
    @Override
    public byte[] brpoplpush(byte[] source, byte[] destination, int timeout) {
        return wrapped.brpoplpush(namespace.add(source), namespace.add(destination), timeout);
    }
    
    @Override
    public String brpoplpush(String source, String destination, int timeout) {
        return wrapped.brpoplpush(namespace.add(source), namespace.add(destination), timeout);
    }
    
    @Override
    public List configGet(String pattern) {
        return wrapped.configGet(pattern);
    }
    
    @Override
    public String configResetStat() {
        return wrapped.configResetStat();
    }
    
    @Override
    public String configSet(String parameter, String value) {
        return wrapped.configSet(parameter, value);
    }
    
    @Override
    public void connect() {
        wrapped.connect();
    }
    
    @Override
    public Long dbSize() {
        return wrapped.dbSize();
    }
    
    @Override
    public String debug(DebugParams params) {
        return wrapped.debug(params);
    }
    
    @Override
    public Long decr(byte[] key) {
        return wrapped.decr(namespace.add(key));
    }
    
    @Override
    public Long decr(String key) {
        return wrapped.decr(namespace.add(key));
    }
    
    @Override
    public Long decrBy(byte[] key, long integer) {
        return wrapped.decrBy(namespace.add(key), integer);
    }
    
    @Override
    public Long decrBy(String key, long integer) {
        return wrapped.decrBy(namespace.add(key), integer);
    }
    
    @Override
    public Long del(byte[]... keys) {
        return wrapped.del(namespace.add(keys));
    }
    
    @Override
    public Long del(String... keys) {
        return wrapped.del(namespace.add(keys));
    }
    
    @Override
    public void disconnect() {
        wrapped.disconnect();
    }
    
    @Override
    public byte[] echo(byte[] string) {
        return wrapped.echo(string);
    }
    
    @Override
    public String echo(String string) {
        return wrapped.echo(string);
    }
    
    @Override
    public Boolean exists(byte[] key) {
        return wrapped.exists(namespace.add(key));
    }
    
    @Override
    public Boolean exists(String key) {
        return wrapped.exists(namespace.add(key));
    }
    
    @Override
    public Long expire(byte[] key, int seconds) {
        return wrapped.expire(namespace.add(key), seconds);
    }
    
    @Override
    public Long expire(String key, int seconds) {
        return wrapped.expire(namespace.add(key), seconds);
    }
    
    @Override
    public Long expireAt(byte[] key, long unixTime) {
        return wrapped.expireAt(namespace.add(key), unixTime);
    }
    
    @Override
    public Long expireAt(String key, long unixTime) {
        return wrapped.expireAt(namespace.add(key), unixTime);
    }
    
    @Override
    public String flushAll() {
        return wrapped.flushAll();
    }
    
    @Override
    public String flushDB() {
        return wrapped.flushDB();
    }

    @Override
    public byte[] get(byte[] key) {
        return wrapped.get(namespace.add(key));
    }

    @Override
    public String get(String key) {
        return wrapped.get(namespace.add(key));
    }

    @Override
    public Long getbit(byte[] key, long offset) {
        return wrapped.getbit(namespace.add(key), offset);
    }

    @Override
    public boolean getbit(String key, long offset) {
        return wrapped.getbit(namespace.add(key), offset);
    }

    @Override
    public Client getClient() {
        return wrapped.getClient();
    }

    @Override
    public Long getDB() {
        return wrapped.getDB();
    }

    public String getNamespace() {
        return namespace.get();
    }

    @Override
    public String getrange(byte[] key, long startOffset, long endOffset) {
        return wrapped.getrange(namespace.add(key), startOffset, endOffset);
    }

    @Override
    public String getrange(String key, long startOffset, long endOffset) {
        return wrapped.getrange(namespace.add(key), startOffset, endOffset);
    }

    @Override
    public byte[] getSet(byte[] key, byte[] value) {
        return wrapped.getSet(namespace.add(key), value);
    }

    @Override
    public String getSet(String key, String value) {
        return wrapped.getSet(namespace.add(key), value);
    }

    @Override
    public Long hdel(byte[] key, byte[] field) {
        return wrapped.hdel(namespace.add(key), field);
    }

    @Override
    public Long hdel(String key, String field) {
        return wrapped.hdel(namespace.add(key), field);
    }

    @Override
    public Boolean hexists(byte[] key, byte[] field) {
        return wrapped.hexists(namespace.add(key), field);
    }

    @Override
    public Boolean hexists(String key, String field) {
        return wrapped.hexists(namespace.add(key), field);
    }

    @Override
    public byte[] hget(byte[] key, byte[] field) {
        return wrapped.hget(namespace.add(key), field);
    }

    @Override
    public String hget(String key, String field) {
        return wrapped.hget(namespace.add(key), field);
    }

    @Override
    public Map hgetAll(byte[] key) {
        return wrapped.hgetAll(namespace.add(key));
    }

    @Override
    public Map hgetAll(String key) {
        return wrapped.hgetAll(namespace.add(key));
    }

    @Override
    public Long hincrBy(byte[] key, byte[] field, long value) {
        return wrapped.hincrBy(namespace.add(key), field, value);
    }

    @Override
    public Long hincrBy(String key, String field, long value) {
        return wrapped.hincrBy(namespace.add(key), field, value);
    }

    @Override
    public Set hkeys(byte[] key) {
        return wrapped.hkeys(namespace.add(key));
    }

    @Override
    public Set hkeys(String key) {
        return wrapped.hkeys(namespace.add(key));
    }

    @Override
    public Long hlen(byte[] key) {
        return wrapped.hlen(namespace.add(key));
    }

    @Override
    public Long hlen(String key) {
        return wrapped.hlen(namespace.add(key));
    }

    @Override
    public List hmget(byte[] key, byte[]... fields) {
        return wrapped.hmget(namespace.add(key), fields);
    }

    @Override
    public List hmget(String key, String... fields) {
        return wrapped.hmget(namespace.add(key), fields);
    }

    @Override
    public String hmset(byte[] key, Map hash) {
        return wrapped.hmset(namespace.add(key), hash);
    }

    @Override
    public String hmset(String key, Map hash) {
        return wrapped.hmset(namespace.add(key), hash);
    }

    @Override
    public Long hset(byte[] key, byte[] field, byte[] value) {
        return wrapped.hset(namespace.add(key), field, value);
    }

    @Override
    public Long hset(String key, String field, String value) {
        return wrapped.hset(namespace.add(key), field, value);
    }

    @Override
    public Long hsetnx(byte[] key, byte[] field, byte[] value) {
        return wrapped.hsetnx(namespace.add(key), field, value);
    }

    @Override
    public Long hsetnx(String key, String field, String value) {
        return wrapped.hsetnx(namespace.add(key), field, value);
    }

    @Override
    public List hvals(byte[] key) {
        return wrapped.hvals(namespace.add(key));
    }

    @Override
    public List hvals(String key) {
        return wrapped.hvals(namespace.add(key));
    }

    @Override
    public Long incr(byte[] key) {
        return wrapped.incr(namespace.add(key));
    }

    @Override
    public Long incr(String key) {
        return wrapped.incr(namespace.add(key));
    }

    @Override
    public Long incrBy(byte[] key, long integer) {
        return wrapped.incrBy(namespace.add(key), integer);
    }

    @Override
    public Long incrBy(String key, long integer) {
        return wrapped.incrBy(namespace.add(key), integer);
    }

    @Override
    public String info() {
        return wrapped.info();
    }

    @Override
    public boolean isConnected() {
        return wrapped.isConnected();
    }

    @Override
    public Set keys(byte[] pattern) {
        return wrapped.keys(pattern);
    }

    @Override
    public Set keys(String pattern) {
        return namespace.remove(wrapped.keys(namespace.add(pattern)));
    }

    @Override
    public Long lastsave() {
        return wrapped.lastsave();
    }

    @Override
    public byte[] lindex(byte[] key, int index) {
        return wrapped.lindex(namespace.add(key), index);
    }

    @Override
    public String lindex(String key, long index) {
        return wrapped.lindex(namespace.add(key), index);
    }

    @Override
    public Long linsert(byte[] key, LIST_POSITION where, byte[] pivot, byte[] value) {
        return wrapped.linsert(namespace.add(key), where, pivot, value);
    }

    @Override
    public Long linsert(String key, LIST_POSITION where, String pivot, String value) {
        return wrapped.linsert(namespace.add(key), where, pivot, value);
    }

    @Override
    public Long llen(byte[] key) {
        return wrapped.llen(namespace.add(key));
    }

    @Override
    public Long llen(String key) {
        return wrapped.llen(namespace.add(key));
    }

    @Override
    public byte[] lpop(byte[] key) {
        return wrapped.lpop(namespace.add(key));
    }

    @Override
    public String lpop(String key) {
        return wrapped.lpop(namespace.add(key));
    }

    @Override
    public Long lpush(byte[] key, byte[] string) {
        return wrapped.lpush(namespace.add(key), string);
    }

    @Override
    public Long lpush(String key, String string) {
        return wrapped.lpush(namespace.add(key), string);
    }

    @Override
    public Long lpushx(byte[] key, byte[] string) {
        return wrapped.lpushx(namespace.add(key), string);
    }

    @Override
    public Long lpushx(String key, String string) {
        return wrapped.lpushx(namespace.add(key), string);
    }

    @Override
    public List lrange(byte[] key, int start, int end) {
        return wrapped.lrange(namespace.add(key), start, end);
    }

    @Override
    public List lrange(String key, long start, long end) {
        return wrapped.lrange(namespace.add(key), start, end);
    }

    @Override
    public Long lrem(byte[] key, int count, byte[] value) {
        return wrapped.lrem(namespace.add(key), count, value);
    }

    @Override
    public Long lrem(String key, long count, String value) {
        return wrapped.lrem(namespace.add(key), count, value);
    }

    @Override
    public String lset(byte[] key, int index, byte[] value) {
        return wrapped.lset(namespace.add(key), index, value);
    }

    @Override
    public String lset(String key, long index, String value) {
        return wrapped.lset(namespace.add(key), index, value);
    }

    @Override
    public String ltrim(byte[] key, int start, int end) {
        return wrapped.ltrim(namespace.add(key), start, end);
    }

    @Override
    public String ltrim(String key, long start, long end) {
        return wrapped.ltrim(namespace.add(key), start, end);
    }

    @Override
    public List mget(byte[]... keys) {
        return wrapped.mget(namespace.add(keys));
    }

    @Override
    public List mget(String... keys) {
        return wrapped.mget(namespace.add(keys));
    }

    @Override
    public void monitor(JedisMonitor jedisMonitor) {
        wrapped.monitor(jedisMonitor);
    }

    @Override
    public Long move(byte[] key, int dbIndex) {
        return wrapped.move(namespace.add(key), dbIndex);
    }

    @Override
    public Long move(String key, int dbIndex) {
        return wrapped.move(namespace.add(key), dbIndex);
    }

    @Override
    public String mset(byte[]... keysvalues) {
        return wrapped.mset(namespace.addEveryOther(keysvalues));
    }

    @Override
    public String mset(String... keysvalues) {
        return wrapped.mset(namespace.addEveryOther(keysvalues));
    }

    @Override
    public Long msetnx(byte[]... keysvalues) {
        return wrapped.msetnx(namespace.addEveryOther(keysvalues));
    }

    @Override
    public Long msetnx(String... keysvalues) {
        return wrapped.msetnx(namespace.addEveryOther(keysvalues));
    }

    @Override
    public Transaction multi() {
        return wrapped.multi();
    }

    @Override
    public List multi(TransactionBlock jedisTransaction) {
        return wrapped.multi(jedisTransaction);
    }

    @Override
    public Long persist(byte[] key) {
        return wrapped.persist(namespace.add(key));
    }

    @Override
    public Long persist(String key) {
        return wrapped.persist(namespace.add(key));
    }

    @Override
    public String ping() {
        return wrapped.ping();
    }

    @Override
    public Pipeline pipelined() {
        Pipeline pipeline = new NamespacePipeline(namespace);
        pipeline.setClient(getClient());
        return pipeline;
    }

    /**
     * Must use a {@link PipelineBlock} derived from {@link NamespacePipelineBlock} for namespaces to be honored here!
     */
    @Override
    public List pipelined(PipelineBlock jedisPipeline) {
        return wrapped.pipelined(jedisPipeline);
    }

    @Override
    public void psubscribe(BinaryJedisPubSub jedisPubSub, byte[]... patterns) {
        wrapped.psubscribe(jedisPubSub, patterns);
    }

    @Override
    public void psubscribe(JedisPubSub jedisPubSub, String... patterns) {
        wrapped.psubscribe(jedisPubSub, patterns);
    }

    @Override
    public Long publish(byte[] channel, byte[] message) {
        return wrapped.publish(channel, message);
    }

    @Override
    public Long publish(String channel, String message) {
        return wrapped.publish(channel, message);
    }

    @Override
    public String quit() {
        return wrapped.quit();
    }

    @Override
    public byte[] randomBinaryKey() {
        return wrapped.randomBinaryKey();
    }

    /**
     * Namespaces are not honored here, since that would destroy the O(1) performance of the underlying method. This is
     * consistent with the Redis::Namespace implementation.
     */
    @Override
    public String randomKey() {
        return wrapped.randomKey();
    }

    @Override
    public String rename(byte[] oldkey, byte[] newkey) {
        return wrapped.rename(oldkey, newkey);
    }

    @Override
    public String rename(String oldkey, String newkey) {
        return wrapped.rename(namespace.add(oldkey), namespace.add(newkey));
    }

    @Override
    public Long renamenx(byte[] oldkey, byte[] newkey) {
        return wrapped.renamenx(oldkey, newkey);
    }

    @Override
    public Long renamenx(String oldkey, String newkey) {
        return wrapped.renamenx(namespace.add(oldkey), namespace.add(newkey));
    }

    @Override
    public byte[] rpop(byte[] key) {
        return wrapped.rpop(namespace.add(key));
    }

    @Override
    public String rpop(String key) {
        return wrapped.rpop(namespace.add(key));
    }

    @Override
    public byte[] rpoplpush(byte[] srckey, byte[] dstkey) {
        return wrapped.rpoplpush(srckey, namespace.add(dstkey));
    }

    @Override
    public String rpoplpush(String srckey, String dstkey) {
        return wrapped.rpoplpush(srckey, namespace.add(dstkey));
    }

    @Override
    public Long rpush(byte[] key, byte[] string) {
        return wrapped.rpush(namespace.add(key), string);
    }

    @Override
    public Long rpush(String key, String string) {
        return wrapped.rpush(namespace.add(key), string);
    }

    @Override
    public Long rpushx(byte[] key, byte[] string) {
        return wrapped.rpushx(namespace.add(key), string);
    }

    @Override
    public Long rpushx(String key, String string) {
        return wrapped.rpushx(namespace.add(key), string);
    }

    @Override
    public Long sadd(byte[] key, byte[] member) {
        return wrapped.sadd(namespace.add(key), member);
    }

    @Override
    public Long sadd(String key, String member) {
        return wrapped.sadd(namespace.add(key), member);
    }

    @Override
    public String save() {
        return wrapped.save();
    }

    @Override
    public Long scard(byte[] key) {
        return wrapped.scard(namespace.add(key));
    }

    @Override
    public Long scard(String key) {
        return wrapped.scard(namespace.add(key));
    }

    @Override
    public Set sdiff(byte[]... keys) {
        return wrapped.sdiff(namespace.add(keys));
    }

    @Override
    public Set sdiff(String... keys) {
        return wrapped.sdiff(namespace.add(keys));
    }

    @Override
    public Long sdiffstore(byte[] dstkey, byte[]... keys) {
        return wrapped.sdiffstore(namespace.add(dstkey), namespace.add(keys));
    }

    @Override
    public Long sdiffstore(String dstkey, String... keys) {
        return wrapped.sdiffstore(namespace.add(dstkey), namespace.add(keys));
    }

    @Override
    public String select(int index) {
        return wrapped.select(index);
    }

    @Override
    public String set(byte[] key, byte[] value) {
        return wrapped.set(namespace.add(key), value);
    }

    @Override
    public String set(String key, String value) {
        return wrapped.set(namespace.add(key), value);
    }

    @Override
    public Long setbit(byte[] key, long offset, byte[] value) {
        return wrapped.setbit(namespace.add(key), offset, value);
    }

    @Override
    public boolean setbit(String key, long offset, boolean value) {
        return wrapped.setbit(namespace.add(key), offset, value);
    }

    @Override
    public String setex(byte[] key, int seconds, byte[] value) {
        return wrapped.setex(namespace.add(key), seconds, value);
    }

    @Override
    public String setex(String key, int seconds, String value) {
        return wrapped.setex(namespace.add(key), seconds, value);
    }

    public void setNamespace(String namespace) {
        this.namespace = new NamespaceHandler(namespace);
    }

    @Override
    public Long setnx(byte[] key, byte[] value) {
        return wrapped.setnx(namespace.add(key), value);
    }

    @Override
    public Long setnx(String key, String value) {
        return wrapped.setnx(namespace.add(key), value);
    }

    @Override
    public long setrange(byte[] key, long offset, byte[] value) {
        return wrapped.setrange(namespace.add(key), offset, value);
    }

    @Override
    public long setrange(String key, long offset, String value) {
        return wrapped.setrange(namespace.add(key), offset, value);
    }

    @Override
    public String shutdown() {
        return wrapped.shutdown();
    }

    @Override
    public Set sinter(byte[]... keys) {
        return wrapped.sinter(namespace.add(keys));
    }

    @Override
    public Set sinter(String... keys) {
        return wrapped.sinter(namespace.add(keys));
    }

    @Override
    public Long sinterstore(byte[] dstkey, byte[]... keys) {
        return wrapped.sinterstore(namespace.add(dstkey), namespace.add(keys));
    }

    @Override
    public Long sinterstore(String dstkey, String... keys) {
        return wrapped.sinterstore(namespace.add(dstkey), namespace.add(keys));
    }

    @Override
    public Boolean sismember(byte[] key, byte[] member) {
        return wrapped.sismember(namespace.add(key), member);
    }

    @Override
    public Boolean sismember(String key, String member) {
        return wrapped.sismember(namespace.add(key), member);
    }

    @Override
    public String slaveof(String host, int port) {
        return wrapped.slaveof(host, port);
    }

    @Override
    public String slaveofNoOne() {
        return wrapped.slaveofNoOne();
    }

    @Override
    public Set smembers(byte[] key) {
        return wrapped.smembers(namespace.add(key));
    }

    @Override
    public Set smembers(String key) {
        return wrapped.smembers(namespace.add(key));
    }

    @Override
    public Long smove(byte[] srckey, byte[] dstkey, byte[] member) {
        return wrapped.smove(namespace.add(srckey), namespace.add(dstkey), member);
    }

    @Override
    public Long smove(String srckey, String dstkey, String member) {
        return wrapped.smove(namespace.add(srckey), namespace.add(dstkey), member);
    }

    @Override
    public List sort(byte[] key) {
        return wrapped.sort(namespace.add(key));
    }

    @Override
    public Long sort(byte[] key, byte[] dstkey) {
        return wrapped.sort(namespace.add(key), namespace.add(dstkey));
    }

    @Override
    public List sort(byte[] key, SortingParams sortingParameters) {
        return wrapped.sort(namespace.add(key), namespace.add(sortingParameters));
    }

    @Override
    public Long sort(byte[] key, SortingParams sortingParameters, byte[] dstkey) {
        return wrapped.sort(namespace.add(key), namespace.add(sortingParameters), namespace.add(dstkey));
    }

    @Override
    public List sort(String key) {
        return wrapped.sort(namespace.add(key));
    }

    @Override
    public List sort(String key, SortingParams sortingParameters) {
        return wrapped.sort(namespace.add(key), namespace.add(sortingParameters));
    }

    @Override
    public Long sort(String key, SortingParams sortingParameters, String dstkey) {
        return wrapped.sort(namespace.add(key), namespace.add(sortingParameters), namespace.add(dstkey));
    }

    @Override
    public Long sort(String key, String dstkey) {
        return wrapped.sort(namespace.add(key), namespace.add(dstkey));
    }

    @Override
    public byte[] spop(byte[] key) {
        return wrapped.spop(namespace.add(key));
    }

    @Override
    public String spop(String key) {
        return wrapped.spop(namespace.add(key));
    }

    @Override
    public byte[] srandmember(byte[] key) {
        return wrapped.srandmember(namespace.add(key));
    }

    @Override
    public String srandmember(String key) {
        return wrapped.srandmember(namespace.add(key));
    }

    @Override
    public Long srem(byte[] key, byte[] member) {
        return wrapped.srem(namespace.add(key), member);
    }

    @Override
    public Long srem(String key, String member) {
        return wrapped.srem(namespace.add(key), member);
    }

    @Override
    public Long strlen(byte[] key) {
        return wrapped.strlen(namespace.add(key));
    }

    @Override
    public Long strlen(String key) {
        return wrapped.strlen(namespace.add(key));
    }

    @Override
    public void subscribe(BinaryJedisPubSub jedisPubSub, byte[]... channels) {
        wrapped.subscribe(jedisPubSub, channels);
    }

    @Override
    public void subscribe(JedisPubSub jedisPubSub, String... channels) {
        wrapped.subscribe(jedisPubSub, channels);
    }

    @Override
    public byte[] substr(byte[] key, int start, int end) {
        return wrapped.substr(namespace.add(key), start, end);
    }

    @Override
    public String substr(String key, int start, int end) {
        return wrapped.substr(namespace.add(key), start, end);
    }

    @Override
    public Set sunion(byte[]... keys) {
        return wrapped.sunion(namespace.add(keys));
    }

    @Override
    public Set sunion(String... keys) {
        return wrapped.sunion(namespace.add(keys));
    }

    @Override
    public Long sunionstore(byte[] dstkey, byte[]... keys) {
        return wrapped.sunionstore(namespace.add(dstkey), namespace.add(keys));
    }

    @Override
    public Long sunionstore(String dstkey, String... keys) {
        return wrapped.sunionstore(namespace.add(dstkey), namespace.add(keys));
    }

    @Override
    public void sync() {
        wrapped.sync();
    }

    @Override
    public Long ttl(byte[] key) {
        return wrapped.ttl(namespace.add(key));
    }

    @Override
    public Long ttl(String key) {
        return wrapped.ttl(namespace.add(key));
    }

    @Override
    public String type(byte[] key) {
        return wrapped.type(namespace.add(key));
    }

    @Override
    public String type(String key) {
        return wrapped.type(namespace.add(key));
    }

    @Override
    public String unwatch() {
        return wrapped.unwatch();
    }

    @Override
    public String watch(byte[]... keys) {
        return wrapped.watch(namespace.add(keys));
    }

    @Override
    public String watch(String... keys) {
        return wrapped.watch(namespace.add(keys));
    }

    public NamespaceJedis withNamespace(String ns) {
        setNamespace(ns);
        return this;
    }

    @Override
    public Long zadd(byte[] key, double score, byte[] member) {
        return wrapped.zadd(namespace.add(key), score, member);
    }

    @Override
    public Long zadd(String key, double score, String member) {
        return wrapped.zadd(namespace.add(key), score, member);
    }

    @Override
    public Long zcard(byte[] key) {
        return wrapped.zcard(namespace.add(key));
    }

    @Override
    public Long zcard(String key) {
        return wrapped.zcard(namespace.add(key));
    }

    @Override
    public Long zcount(byte[] key, double min, double max) {
        return wrapped.zcount(namespace.add(key), min, max);
    }

    @Override
    public Long zcount(String key, double min, double max) {
        return wrapped.zcount(namespace.add(key), min, max);
    }

    @Override
    public Double zincrby(byte[] key, double score, byte[] member) {
        return wrapped.zincrby(namespace.add(key), score, member);
    }

    @Override
    public Double zincrby(String key, double score, String member) {
        return wrapped.zincrby(namespace.add(key), score, member);
    }

    @Override
    public Long zinterstore(byte[] dstkey, byte[]... sets) {
        return wrapped.zinterstore(namespace.add(dstkey), namespace.add(sets));
    }

    @Override
    public Long zinterstore(byte[] dstkey, ZParams params, byte[]... sets) {
        return wrapped.zinterstore(namespace.add(dstkey), params, namespace.add(sets));
    }

    @Override
    public Long zinterstore(String dstkey, String... sets) {
        return wrapped.zinterstore(namespace.add(dstkey), namespace.add(sets));
    }

    @Override
    public Long zinterstore(String dstkey, ZParams params, String... sets) {
        return wrapped.zinterstore(namespace.add(dstkey), params, namespace.add(sets));
    }

    @Override
    public Set zrange(byte[] key, int start, int end) {
        return wrapped.zrange(namespace.add(key), start, end);
    }

    @Override
    public Set zrange(String key, int start, int end) {
        return wrapped.zrange(namespace.add(key), start, end);
    }

    @Override
    public Set zrangeByScore(byte[] key, byte[] min, byte[] max) {
        return wrapped.zrangeByScore(namespace.add(key), min, max);
    }

    @Override
    public Set zrangeByScore(byte[] key, double min, double max) {
        return wrapped.zrangeByScore(namespace.add(key), min, max);
    }

    @Override
    public Set zrangeByScore(byte[] key, double min, double max, int offset, int count) {
        return wrapped.zrangeByScore(namespace.add(key), min, max, offset, count);
    }

    @Override
    public Set zrangeByScore(String key, double min, double max) {
        return wrapped.zrangeByScore(namespace.add(key), min, max);
    }

    @Override
    public Set zrangeByScore(String key, double min, double max, int offset, int count) {
        return wrapped.zrangeByScore(namespace.add(key), min, max, offset, count);
    }

    @Override
    public Set zrangeByScore(String key, String min, String max) {
        return wrapped.zrangeByScore(namespace.add(key), min, max);
    }

    @Override
    public Set zrangeByScoreWithScores(byte[] key, double min, double max) {
        return wrapped.zrangeByScoreWithScores(namespace.add(key), min, max);
    }

    @Override
    public Set zrangeByScoreWithScores(byte[] key, double min, double max, int offset, int count) {
        return wrapped.zrangeByScoreWithScores(namespace.add(key), min, max, offset, count);
    }

    @Override
    public Set zrangeByScoreWithScores(String key, double min, double max) {
        return wrapped.zrangeByScoreWithScores(namespace.add(key), min, max);
    }

    @Override
    public Set zrangeByScoreWithScores(String key, double min, double max, int offset, int count) {
        return wrapped.zrangeByScoreWithScores(namespace.add(key), min, max, offset, count);
    }

    @Override
    public Set zrangeWithScores(byte[] key, int start, int end) {
        return wrapped.zrangeWithScores(namespace.add(key), start, end);
    }

    @Override
    public Set zrangeWithScores(String key, int start, int end) {
        return wrapped.zrangeWithScores(namespace.add(key), start, end);
    }

    @Override
    public Long zrank(byte[] key, byte[] member) {
        return wrapped.zrank(namespace.add(key), member);
    }

    @Override
    public Long zrank(String key, String member) {
        return wrapped.zrank(namespace.add(key), member);
    }

    @Override
    public Long zrem(byte[] key, byte[] member) {
        return wrapped.zrem(namespace.add(key), member);
    }

    @Override
    public Long zrem(String key, String member) {
        return wrapped.zrem(namespace.add(key), member);
    }

    @Override
    public Long zremrangeByRank(byte[] key, int start, int end) {
        return wrapped.zremrangeByRank(namespace.add(key), start, end);
    }

    @Override
    public Long zremrangeByRank(String key, int start, int end) {
        return wrapped.zremrangeByRank(namespace.add(key), start, end);
    }

    @Override
    public Long zremrangeByScore(byte[] key, double start, double end) {
        return wrapped.zremrangeByScore(namespace.add(key), start, end);
    }

    @Override
    public Long zremrangeByScore(String key, double start, double end) {
        return wrapped.zremrangeByScore(namespace.add(key), start, end);
    }

    @Override
    public Set zrevrange(byte[] key, int start, int end) {
        return wrapped.zrevrange(namespace.add(key), start, end);
    }

    @Override
    public Set zrevrange(String key, int start, int end) {
        return wrapped.zrevrange(namespace.add(key), start, end);
    }

    @Override
    public Set zrevrangeByScore(byte[] key, byte[] max, byte[] min) {
        return wrapped.zrevrangeByScore(namespace.add(key), max, min);
    }

    @Override
    public Set zrevrangeByScore(byte[] key, double max, double min) {
        return wrapped.zrevrangeByScore(namespace.add(key), max, min);
    }

    @Override
    public Set zrevrangeByScore(byte[] key, double max, double min, int offset, int count) {
        return wrapped.zrevrangeByScore(namespace.add(key), max, min, offset, count);
    }

    @Override
    public Set zrevrangeByScore(String key, double max, double min) {
        return wrapped.zrevrangeByScore(namespace.add(key), max, min);
    }

    @Override
    public Set zrevrangeByScore(String key, double max, double min, int offset, int count) {
        return wrapped.zrevrangeByScore(namespace.add(key), max, min, offset, count);
    }

    @Override
    public Set zrevrangeByScore(String key, String max, String min) {
        return wrapped.zrevrangeByScore(namespace.add(key), max, min);
    }

    @Override
    public Set zrevrangeByScoreWithScores(byte[] key, double max, double min) {
        return wrapped.zrevrangeByScoreWithScores(namespace.add(key), max, min);
    }

    @Override
    public Set zrevrangeByScoreWithScores(byte[] key, double max, double min, int offset, int count) {
        return wrapped.zrevrangeByScoreWithScores(namespace.add(key), max, min, offset, count);
    }

    @Override
    public Set zrevrangeByScoreWithScores(String key, double max, double min) {
        return wrapped.zrevrangeByScoreWithScores(namespace.add(key), max, min);
    }

    @Override
    public Set zrevrangeByScoreWithScores(String key, double max, double min, int offset, int count) {
        return wrapped.zrevrangeByScoreWithScores(namespace.add(key), max, min, offset, count);
    }

    @Override
    public Set zrevrangeWithScores(byte[] key, int start, int end) {
        return wrapped.zrevrangeWithScores(namespace.add(key), start, end);
    }

    @Override
    public Set zrevrangeWithScores(String key, int start, int end) {
        return wrapped.zrevrangeWithScores(namespace.add(key), start, end);
    }

    @Override
    public Long zrevrank(byte[] key, byte[] member) {
        return wrapped.zrevrank(namespace.add(key), member);
    }

    @Override
    public Long zrevrank(String key, String member) {
        return wrapped.zrevrank(namespace.add(key), member);
    }

    @Override
    public Double zscore(byte[] key, byte[] member) {
        return wrapped.zscore(namespace.add(key), member);
    }

    @Override
    public Double zscore(String key, String member) {
        return wrapped.zscore(namespace.add(key), member);
    }

    @Override
    public Long zunionstore(byte[] dstkey, byte[]... sets) {
        return wrapped.zunionstore(namespace.add(dstkey), namespace.add(sets));
    }

    @Override
    public Long zunionstore(byte[] dstkey, ZParams params, byte[]... sets) {
        return wrapped.zunionstore(namespace.add(dstkey), params, namespace.add(sets));
    }

    @Override
    public Long zunionstore(String dstkey, String... sets) {
        return wrapped.zunionstore(namespace.add(dstkey), namespace.add(sets));
    }

    @Override
    public Long zunionstore(String dstkey, ZParams params, String... sets) {
        return wrapped.zunionstore(namespace.add(dstkey), params, namespace.add(sets));
    }
}