java中的redis工具类

1.redis 基础类

package com.qlchat.component.redis.template;

import javax.annotation.PostConstruct;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

import com.qlchat.component.redis.RedisConnectionFactory;
import com.qlchat.component.redis.utils.JsonUtil;

public abstract class BasicRedisTemplate {

</span><span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> Logger logger = LoggerFactory.getLogger(BasicRedisTemplate.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">);

</span><span style="color: rgba(0, 0, 255, 1)">protected</span><span style="color: rgba(0, 0, 0, 1)"> RedisConnectionFactory connectionFactory;

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> setConnectionFactory(RedisConnectionFactory connectionFactory) {
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.connectionFactory =<span style="color: rgba(0, 0, 0, 1)"> connectionFactory;
}

</span><span style="color: rgba(0, 0, 255, 1)">protected</span><span style="color: rgba(0, 0, 0, 1)"> ShardedJedisPool pool;

@PostConstruct
</span><span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> initPool() {
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.pool =<span style="color: rgba(0, 0, 0, 1)"> connectionFactory.getConnectionPool();
}

@SuppressWarnings(</span>"deprecation"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> closeRedis(ShardedJedis jedis) {
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (jedis != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
        </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
            pool.returnResource(jedis);
        } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception e) {
            logger.error(</span>"Error happen when return jedis to pool, try to close it directly."<span style="color: rgba(0, 0, 0, 1)">, e);
            </span><span style="color: rgba(0, 0, 255, 1)">if</span> (jedis != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
                </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
                    jedis.disconnect();
                } </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception e1) {
                }
            }
        }
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 删除key, 如果key存在返回true, 否则返回false。
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> del(String key) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> jedis.del(key) == 1 ? <span style="color: rgba(0, 0, 255, 1)">true</span> : <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * true if the key exists, otherwise false
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> Boolean exists(String key) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.exists(key);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * set key expired time
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> seconds
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Boolean expire(String key, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> seconds) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (seconds == 0<span style="color: rgba(0, 0, 0, 1)">) {
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
    }
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> jedis.expire(key, seconds) == 1 ? <span style="color: rgba(0, 0, 255, 1)">true</span> : <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 
 * 把object转换为json byte array
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> o
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
 <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">byte</span><span style="color: rgba(0, 0, 0, 1)">[] toJsonByteArray(Object o) {
    String json </span>= JsonUtil.toJsonString(o) != <span style="color: rgba(0, 0, 255, 1)">null</span> ? JsonUtil.toJsonString(o) : ""<span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> json.getBytes();
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 
 * 把json byte array转换为T类型object
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> b
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> clazz
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
 <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">protected</span> &lt;T&gt; T fromJsonByteArray(<span style="color: rgba(0, 0, 255, 1)">byte</span>[] b, Class&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)"> clazz) {
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (b == <span style="color: rgba(0, 0, 255, 1)">null</span> || b.length == 0<span style="color: rgba(0, 0, 0, 1)">) {
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    }
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> JsonUtil.parseJson(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> String(b), clazz);
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> Long ttl(<span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String key) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.ttl(key);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

}
2.String 类型 redis 工具类

package com.qlchat.component.redis.template;

import redis.clients.jedis.ShardedJedis;

import com.qlchat.component.redis.RedisException;

public class ValueRedisTemplate extends BasicRedisTemplate {

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * set key-value
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value String 
 * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> RedisException
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> set(String key, String value) {
    set(key, value, </span>0<span style="color: rgba(0, 0, 0, 1)">);
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * set key-value
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value String 
 * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> RedisException
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> set(String key, String value, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> ttl) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        jedis.set(key, value);
        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (ttl &gt; 0<span style="color: rgba(0, 0, 0, 1)">) {
            jedis.expire(key.getBytes(), ttl);
        }
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * set key-value For Object(NOT String)
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value Object
 * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> RedisException
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> set(String key, Object value) {
    set(key, value, </span>0<span style="color: rgba(0, 0, 0, 1)">);
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * set key-value For Object(NOT String)
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value Object
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> ttl int
 * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> RedisException
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> set(String key, Object value, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> ttl) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> jedis.set(key.getBytes(), HessianSerializer.serialize(value));</span>

jedis.set(key.getBytes(), toJsonByteArray(value));
if (ttl > 0) {
jedis.expire(key.getBytes(), ttl);
}
}
finally {
this.closeRedis(jedis);
}
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * set key-value with expired time(s)
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> seconds
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> RedisException
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> String setex(String key, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> seconds, String value) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.setex(key, seconds, value);

    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * set key-value For Object(NOT String) with expired time(s)
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> seconds
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> RedisException
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> String setex(String key, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> seconds, Object value) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> return jedis.setex(key.getBytes(), seconds, HessianSerializer.serialize(value));</span>
        <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.setex(key.getBytes(), seconds, toJsonByteArray(value));
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 如果key还不存在则进行设置,返回true,否则返回false.
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> 
 * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> RedisException
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span> setnx(String key, String value, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> ttl) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        Long reply </span>=<span style="color: rgba(0, 0, 0, 1)"> jedis.setnx(key, value);
        </span><span style="color: rgba(0, 0, 255, 1)">if</span>(reply == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">){
            reply </span>= 0L<span style="color: rgba(0, 0, 0, 1)">;
        }
        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (ttl &gt; 0 &amp;&amp; reply.longValue() == 1<span style="color: rgba(0, 0, 0, 1)">) {
            jedis.expire(key, ttl);
        }
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> reply.longValue() == 1<span style="color: rgba(0, 0, 0, 1)">;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 如果key还不存在则进行设置,返回true,否则返回false.
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> 
 * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> RedisException
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> setnx(String key, String value) {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> setnx(key, value, 0<span style="color: rgba(0, 0, 0, 1)">);
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 如果key还不存在则进行设置 For Object,返回true,否则返回false.
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> 
 * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> RedisException
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span><span style="color: rgba(0, 0, 0, 1)"> setnx(String key, Object value) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> return jedis.setnx(key.getBytes(), HessianSerializer.serialize(value)) == 1 ? true : false;</span>
        <span style="color: rgba(0, 0, 255, 1)">return</span> jedis.setnx(key.getBytes(), toJsonByteArray(value)) == 1 ? <span style="color: rgba(0, 0, 255, 1)">true</span> : <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 如果key还不存在则进行设置 For Object,返回true,否则返回false.
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> 
 * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> RedisException
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">boolean</span> setnx(String key, Object value, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> ttl) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Long reply = jedis.setnx(key.getBytes(), HessianSerializer.serialize(value));</span>
        Long reply =<span style="color: rgba(0, 0, 0, 1)"> jedis.setnx(key.getBytes(), toJsonByteArray(value));
        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (ttl &gt; 0<span style="color: rgba(0, 0, 0, 1)">) {
            jedis.expire(key.getBytes(), ttl);
        }
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> reply == 1<span style="color: rgba(0, 0, 0, 1)">;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 如果key不存在, 返回null.
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String get(String key) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.get(key);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * For Object, 如果key不存在, 返回null.
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> &lt;T&gt; T get(String key, Class&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)"> clazz) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> return (T) HessianSerializer.deserialize(jedis.get(key.getBytes()));</span>
        <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> fromJsonByteArray(jedis.get(key.getBytes()), clazz);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 自增 +1
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> 返回自增后结果
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Long incr(<span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String key) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.incr(key);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 自增 +1
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> integer 起始值
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> 返回自增后结果
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Long incrBy(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> integer) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.incrBy(key, integer);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 自减 -1
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)"> 返回自减后结果
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Long decr(<span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String key) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.decr(key);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

}
Hash 类型 redis 工具类

package com.qlchat.component.redis.template;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import redis.clients.jedis.ShardedJedis;

public class HashRedisTemplate extends BasicRedisTemplate {

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Set the string value of a hash field
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> field
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Boolean hset(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span> String field, <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String value) {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> hset(key, field, value, 0<span style="color: rgba(0, 0, 0, 1)">);
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Set the string value of a hash field
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> field
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> ttl
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Boolean hset(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span> String field, <span style="color: rgba(0, 0, 255, 1)">final</span> String value, <span style="color: rgba(0, 0, 255, 1)">final</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> ttl) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        Long reply </span>=<span style="color: rgba(0, 0, 0, 1)"> jedis.hset(key, field, value);
        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (ttl &gt; 0<span style="color: rgba(0, 0, 0, 1)">) {
            jedis.expire(key, ttl);
        }
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> reply == 1<span style="color: rgba(0, 0, 0, 1)">;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Set the Object value of a hash field
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> field
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Boolean hset(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span> String field, <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> Object value) {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> hset(key, field, value, 0<span style="color: rgba(0, 0, 0, 1)">);
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Set the Object value of a hash field
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> field
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> ttl
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Boolean hset(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span> String field, <span style="color: rgba(0, 0, 255, 1)">final</span> Object value, <span style="color: rgba(0, 0, 255, 1)">final</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> ttl) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        Long reply </span>=<span style="color: rgba(0, 0, 0, 1)"> jedis.hset(key.getBytes(), field.getBytes(), toJsonByteArray(value));
        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (ttl &gt; 0<span style="color: rgba(0, 0, 0, 1)">) {
            jedis.expire(key, ttl);
        }
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> reply == 1<span style="color: rgba(0, 0, 0, 1)">;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Get the value of a hash field
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> field
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> String hget(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String field) {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> hget(key, field, 0<span style="color: rgba(0, 0, 0, 1)">);
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Get the value of a hash field
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> field
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> String hget(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span> String field, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> ttl) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        String res </span>=<span style="color: rgba(0, 0, 0, 1)"> jedis.hget(key, field);
        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (ttl &gt; 0<span style="color: rgba(0, 0, 0, 1)">) {
            jedis.expire(key, ttl);
        }
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> res;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Get the value of a hash field
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> field
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> &lt;T&gt; T hget(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span> String field, <span style="color: rgba(0, 0, 255, 1)">final</span> Class&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)"> clazz) {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> hget(key, field, clazz, 0<span style="color: rgba(0, 0, 0, 1)">);
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Get the value of a hash field
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> field
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> &lt;T&gt; T hget(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span> String field, <span style="color: rgba(0, 0, 255, 1)">final</span> Class&lt;T&gt; clazz, <span style="color: rgba(0, 0, 255, 1)">final</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> ttl) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        T res </span>=<span style="color: rgba(0, 0, 0, 1)"> fromJsonByteArray(jedis.hget(key.getBytes(), field.getBytes()), clazz);
        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (ttl &gt; 0<span style="color: rgba(0, 0, 0, 1)">) {
            </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.expire(key, ttl);
        }
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> res;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Delete one or more hash fields
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> fields
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Boolean hdel(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String... fields) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> jedis.hdel(key, fields) == 1 ? <span style="color: rgba(0, 0, 255, 1)">true</span> : <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Check if a hash field exists
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> field
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Boolean hexists(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String field) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.hexists(key, field);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Get all the fields and values in a hash
 * 当Hash较大时候,慎用!
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Map&lt;String, String&gt; hgetAll(<span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String key) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.hgetAll(key);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Get all the fields and values in a hash
 * 当Hash较大时候,慎用!
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Map&lt;String, Object&gt; hgetAllObject(<span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String key) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        Map</span>&lt;<span style="color: rgba(0, 0, 255, 1)">byte</span>[], <span style="color: rgba(0, 0, 255, 1)">byte</span>[]&gt; byteMap =<span style="color: rgba(0, 0, 0, 1)"> jedis.hgetAll(key.getBytes());
        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (byteMap != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; byteMap.size() &gt; 0<span style="color: rgba(0, 0, 0, 1)">) {
            Map</span>&lt;String, Object&gt; map = <span style="color: rgba(0, 0, 255, 1)">new</span> HashMap&lt;String, Object&gt;<span style="color: rgba(0, 0, 0, 1)">();
            </span><span style="color: rgba(0, 0, 255, 1)">for</span> (Entry&lt;<span style="color: rgba(0, 0, 255, 1)">byte</span>[], <span style="color: rgba(0, 0, 255, 1)">byte</span>[]&gt;<span style="color: rgba(0, 0, 0, 1)"> e : byteMap.entrySet()) {
                map.put(</span><span style="color: rgba(0, 0, 255, 1)">new</span> String(e.getKey()), fromJsonByteArray(e.getValue(), Object.<span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">));
            }
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> map;
        }
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Get all the fields and values in a hash
 * 当Hash较大时候,慎用!
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> &lt;T&gt; Map&lt;String, T&gt; hgetAllObject(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, Class&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)"> clazz) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        Map</span>&lt;<span style="color: rgba(0, 0, 255, 1)">byte</span>[], <span style="color: rgba(0, 0, 255, 1)">byte</span>[]&gt; byteMap =<span style="color: rgba(0, 0, 0, 1)"> jedis.hgetAll(key.getBytes());
        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (byteMap != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; byteMap.size() &gt; 0<span style="color: rgba(0, 0, 0, 1)">) {
            Map</span>&lt;String, T&gt; map = <span style="color: rgba(0, 0, 255, 1)">new</span> HashMap&lt;String, T&gt;<span style="color: rgba(0, 0, 0, 1)">();
            </span><span style="color: rgba(0, 0, 255, 1)">for</span> (Entry&lt;<span style="color: rgba(0, 0, 255, 1)">byte</span>[], <span style="color: rgba(0, 0, 255, 1)">byte</span>[]&gt;<span style="color: rgba(0, 0, 0, 1)"> e : byteMap.entrySet()) {
                map.put(</span><span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> String(e.getKey()), fromJsonByteArray(e.getValue(), clazz));
            }
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> map;
        }
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Get the values of all the given hash fields.
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> fields
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> List&lt;String&gt; hmget(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String... fields) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.hmget(key, fields);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 
 * Get the value of a mulit fields
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> ttl
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> fields
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> Wifi 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Map&lt;String, Object&gt; hmgetObject(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span> <span style="color: rgba(0, 0, 255, 1)">int</span> ttl, <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String... fields) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">null</span> ==<span style="color: rgba(0, 0, 0, 1)"> fields) {
            </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
        }
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        List</span>&lt;<span style="color: rgba(0, 0, 255, 1)">byte</span>[]&gt; byteList = <span style="color: rgba(0, 0, 255, 1)">new</span> ArrayList&lt;<span style="color: rgba(0, 0, 255, 1)">byte</span>[]&gt;<span style="color: rgba(0, 0, 0, 1)">();
        </span><span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> (String field : fields) {
            byteList.add(field.getBytes());
        }
        List</span>&lt;<span style="color: rgba(0, 0, 255, 1)">byte</span>[]&gt; resBytes = jedis.hmget(key.getBytes(), byteList.toArray(<span style="color: rgba(0, 0, 255, 1)">new</span> <span style="color: rgba(0, 0, 255, 1)">byte</span><span style="color: rgba(0, 0, 0, 1)">[byteList.size()][]));
        Map</span>&lt;String, Object&gt; resMap = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">null</span> !=<span style="color: rgba(0, 0, 0, 1)"> resBytes) {
            resMap </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> HashMap&lt;String, Object&gt;<span style="color: rgba(0, 0, 0, 1)">();
            </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i &lt; resBytes.size(); i++<span style="color: rgba(0, 0, 0, 1)">) {
                resMap.put(fields[i], fromJsonByteArray(resBytes.get(i), Object.</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)">));
            }
        }
        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (ttl &gt; 0<span style="color: rgba(0, 0, 0, 1)">) {
            </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.expire(key, ttl);
        }
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> resMap;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 
 * Get the value of a mulit fields
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> ttl
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> fields
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> Wifi 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Map&lt;String, Object&gt; hmgetObject(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String... fields) {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> hmgetObject(key, 0<span style="color: rgba(0, 0, 0, 1)">, fields);
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Set multiple hash fields to multiple values.
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> hash
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> String hmset(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span> Map&lt;String, String&gt;<span style="color: rgba(0, 0, 0, 1)"> hash) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.hmset(key, hash);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Set multiple hash fields to multiple values.
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> hash
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> String hmsetObject(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span> Map&lt;String, Object&gt;<span style="color: rgba(0, 0, 0, 1)"> hash) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        Map</span>&lt;<span style="color: rgba(0, 0, 255, 1)">byte</span>[], <span style="color: rgba(0, 0, 255, 1)">byte</span>[]&gt; byteMap = <span style="color: rgba(0, 0, 255, 1)">new</span> HashMap&lt;<span style="color: rgba(0, 0, 255, 1)">byte</span>[], <span style="color: rgba(0, 0, 255, 1)">byte</span>[]&gt;<span style="color: rgba(0, 0, 0, 1)">(hash.size());
        </span><span style="color: rgba(0, 0, 255, 1)">for</span> (Entry&lt;String, Object&gt;<span style="color: rgba(0, 0, 0, 1)"> e : hash.entrySet()) {
            byteMap.put(e.getKey().getBytes(), toJsonByteArray(e.getValue()));
        }
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.hmset(key.getBytes(), byteMap);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Increment the integer value of a hash field by the given number.
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> field
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Long hincrBy(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span> String field, <span style="color: rgba(0, 0, 255, 1)">final</span> <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> value) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.hincrBy(key, field, value);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Get all the fields in a hash.
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Set&lt;String&gt; hkeys(<span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String key) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.hkeys(key);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Get all the fields in a hash.
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> &lt;T&gt; Set&lt;T&gt; hkeys(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span> Class&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)"> clazz) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        Set</span>&lt;<span style="color: rgba(0, 0, 255, 1)">byte</span>[]&gt; set =<span style="color: rgba(0, 0, 0, 1)"> jedis.hkeys(key.getBytes());
        Set</span>&lt;T&gt; objectSet = <span style="color: rgba(0, 0, 255, 1)">new</span> HashSet&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">();
        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (set != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; set.size() != 0<span style="color: rgba(0, 0, 0, 1)">) {
            </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">byte</span><span style="color: rgba(0, 0, 0, 1)">[] b : set) {
                objectSet.add(fromJsonByteArray(b, clazz));
            }
        }
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> objectSet;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Get the number of fields in a hash.
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Long hlen(<span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String key) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.hlen(key);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> Long hsetnx(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span> String field, <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String value) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.hsetnx(key, field, value);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }

}

}
List 基础类型工具类

package com.qlchat.component.redis.template;

import java.util.ArrayList;
import java.util.List;

import redis.clients.jedis.ShardedJedis;

public class ListRedisTemplate extends BasicRedisTemplate {

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Prepend one or multiple values to a list
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> values
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> lpush(String key, String... values) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (values == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
    }
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        jedis.lpush(key, values);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * For Object,Prepend one or multiple values to a list
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> values
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> lpush(String key, Object... values) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (values == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
    }
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">byte</span>[][] strings = <span style="color: rgba(0, 0, 255, 1)">new</span> <span style="color: rgba(0, 0, 255, 1)">byte</span><span style="color: rgba(0, 0, 0, 1)">[values.length][];
        </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> j = 0; j &lt; values.length; j++<span style="color: rgba(0, 0, 0, 1)">) {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> strings[j] = HessianSerializer.serialize(values[j]);</span>
            strings[j] =<span style="color: rgba(0, 0, 0, 1)"> toJsonByteArray(values[j]);
        }
        jedis.lpush(key.getBytes(), strings);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * For single Object,Prepend one or multiple values to a list
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> values
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> lpushForObject(String key, Object value) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (value == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
    }
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> jedis.lpush(key.getBytes(), HessianSerializer.serialize(value));</span>

jedis.lpush(key.getBytes(), toJsonByteArray(value));
}
finally {
this.closeRedis(jedis);
}
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * For single Object,Prepend one or multiple values to a list
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> values
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> rpushForObject(String key, Object value) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (value == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
    }
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> jedis.rpush(key.getBytes(), HessianSerializer.serialize(value));</span>

jedis.rpush(key.getBytes(), toJsonByteArray(value));
}
finally {
this.closeRedis(jedis);
}
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Append one or multiple values to a list
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> values
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> rpush(String key, String... values) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (values == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
    }
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        jedis.rpush(key, values);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * For Object, Append one or multiple values to a list
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> values
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> rpush(String key, Object... values) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (values == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
    }
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">byte</span>[][] strings = <span style="color: rgba(0, 0, 255, 1)">new</span> <span style="color: rgba(0, 0, 255, 1)">byte</span><span style="color: rgba(0, 0, 0, 1)">[values.length][];
        </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> j = 0; j &lt; values.length; j++<span style="color: rgba(0, 0, 0, 1)">) {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> strings[j] = HessianSerializer.serialize(values[j]);</span>
            strings[j] =<span style="color: rgba(0, 0, 0, 1)"> toJsonByteArray(values[j]);
        }
        jedis.rpush(key.getBytes(), strings);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Remove and get the last element in a list
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String rpop(String key) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.rpop(key);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * For Object, Remove and get the last element in a list
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> clazz
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> &lt;T&gt; T rpop(String key, Class&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)"> clazz) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> return (T) HessianSerializer.deserialize(jedis.rpop(key.getBytes()));</span>
        <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> fromJsonByteArray(jedis.rpop(key.getBytes()), clazz);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Remove and get the first element in a list
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String lpop(String key) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.lpop(key);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * For Object, Remove and get the first element in a list
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> clazz
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> &lt;T&gt; T lpop(String key, Class&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)"> clazz) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> return (T) HessianSerializer.deserialize(jedis.lpop(key.getBytes()));</span>
        <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> fromJsonByteArray(jedis.lpop(key.getBytes()), clazz);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Get the length of a list
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> Long llen(String key) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.llen(key);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 删除List中的等于value的元素
 * 
 * count = 1 :删除第一个; count = 0 :删除所有; count = -1:删除最后一个;
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> count
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Long lrem(String key, <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> count, String value) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.lrem(key, count, value);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * FOR Object, 删除List中的等于value的元素
 * 
 * count = 1 :删除第一个; count = 0 :删除所有; count = -1:删除最后一个;
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> count
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Long lrem(String key, <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> count, Object value) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> return jedis.lrem(key.getBytes(), count, HessianSerializer.serialize(value));</span>
        <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.lrem(key.getBytes(), count, toJsonByteArray(value));
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Get a range of elements from a list.
 * &lt;P&gt;
 * For example LRANGE foobar 0 2 will return the first three elements of the list.
 * &lt;/p&gt;
 * &lt;P&gt;
 * For example LRANGE foobar -1 -2 will return the last two elements of the list.
 * &lt;/p&gt;
 * 
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> start
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> end
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> List&lt;String&gt; lrange(String key, <span style="color: rgba(0, 0, 255, 1)">long</span> start, <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> end) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.lrange(key, start, end);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * For Object, Get a range of elements from a list.
 * &lt;P&gt;
 * For example LRANGE foobar 0 2 will return the first three elements of the list.
 * &lt;/p&gt;
 * &lt;P&gt;
 * For example LRANGE foobar -1 -2 will return the last two elements of the list.
 * &lt;/p&gt;
 * 
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> start
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> end
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> &lt;T&gt; List&lt;T&gt; lrange(String key, <span style="color: rgba(0, 0, 255, 1)">long</span> start, <span style="color: rgba(0, 0, 255, 1)">long</span> end, Class&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)"> clazz) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        List</span>&lt;<span style="color: rgba(0, 0, 255, 1)">byte</span>[]&gt; list =<span style="color: rgba(0, 0, 0, 1)"> jedis.lrange(key.getBytes(), start, end);
        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (list != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; list.size() &gt; 0<span style="color: rgba(0, 0, 0, 1)">) {
            List</span>&lt;T&gt; results = <span style="color: rgba(0, 0, 255, 1)">new</span> ArrayList&lt;&gt;<span style="color: rgba(0, 0, 0, 1)">();
            </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">byte</span><span style="color: rgba(0, 0, 0, 1)">[] bytes : list) {
                results.add(fromJsonByteArray(bytes, clazz));
            }
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> results;
        }
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> String ltrim(String key, <span style="color: rgba(0, 0, 255, 1)">long</span> start, <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> end) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.ltrim(key, start, end);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

}
set 基础类型工具类

package com.qlchat.component.redis.template;

import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import redis.clients.jedis.ShardedJedis;

/**
*

  • <b><code>SetRedisTemplate</code></b>
  • <p>
  • Set 数据结构的常用方法封装,支持 Object 类型
  • </p>
  • <b>Creation Time:</b> 2016 年 10 月 12 日 下午 5:51:46

*/
public class SetRedisTemplate extends BasicRedisTemplate {

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Add one or more members to a set
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> members
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Boolean sadd(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String... members) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> jedis.sadd(key, members) == 1 ? <span style="color: rgba(0, 0, 255, 1)">true</span> : <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Add one or more members to a set
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> ttl
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> members
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Boolean sadd(<span style="color: rgba(0, 0, 255, 1)">final</span> String key,<span style="color: rgba(0, 0, 255, 1)">int</span> ttl, <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String... members) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        Boolean ret </span>= jedis.sadd(key, members) == 1 ? <span style="color: rgba(0, 0, 255, 1)">true</span> : <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (ret &amp;&amp; ttl &gt; 0<span style="color: rgba(0, 0, 0, 1)">) {
            jedis.expire(key, ttl);
        }
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> ret;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * For Object, Add one or more members to a set
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> members
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Boolean sadd(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> Object... members) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">byte</span>[][] strings = <span style="color: rgba(0, 0, 255, 1)">new</span> <span style="color: rgba(0, 0, 255, 1)">byte</span><span style="color: rgba(0, 0, 0, 1)">[members.length][];
        </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> j = 0; j &lt; members.length; j++<span style="color: rgba(0, 0, 0, 1)">) {
            strings[j] </span>=<span style="color: rgba(0, 0, 0, 1)"> toJsonByteArray(members[j]);
        }
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> jedis.sadd(key.getBytes(), strings) == 1 ? <span style="color: rgba(0, 0, 255, 1)">true</span> : <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Remove one or more members from a set
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> members
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Boolean srem(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String... members) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> jedis.srem(key, members) == 1 ? <span style="color: rgba(0, 0, 255, 1)">true</span> : <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * For Object, Remove one or more members from a set
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> members
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Boolean srem(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> Object... members) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">byte</span>[][] strings = <span style="color: rgba(0, 0, 255, 1)">new</span> <span style="color: rgba(0, 0, 255, 1)">byte</span><span style="color: rgba(0, 0, 0, 1)">[members.length][];
        </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> j = 0; j &lt; members.length; j++<span style="color: rgba(0, 0, 0, 1)">) {
            strings[j] </span>=<span style="color: rgba(0, 0, 0, 1)"> toJsonByteArray(members[j]);
        }
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> jedis.srem(key.getBytes(), strings) == 1 ? <span style="color: rgba(0, 0, 255, 1)">true</span> : <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Get all the members in a set.
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Set&lt;String&gt; smembers(<span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String key) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.smembers(key);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * For Object, Get all the members in a set.
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> clazz
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> &lt;T&gt; Set&lt;T&gt; smembers(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, Class&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)"> clazz) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        Set</span>&lt;<span style="color: rgba(0, 0, 255, 1)">byte</span>[]&gt; tempSet =<span style="color: rgba(0, 0, 0, 1)"> jedis.smembers(key.getBytes());
        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (tempSet != <span style="color: rgba(0, 0, 255, 1)">null</span> &amp;&amp; tempSet.size() &gt; 0<span style="color: rgba(0, 0, 0, 1)">) {
            TreeSet</span>&lt;T&gt; result = <span style="color: rgba(0, 0, 255, 1)">new</span> TreeSet&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">();
            </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">byte</span><span style="color: rgba(0, 0, 0, 1)">[] value : tempSet) {
                result.add(fromJsonByteArray(value, clazz));
            }
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
        }
        </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * Get all the members is number in a set.
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Long scard(<span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String key) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.scard(key);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * true if the meber exists in a set,else false
 *
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> key
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> member
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@since</span><span style="color: rgba(0, 128, 0, 1)"> qlchat 1.0
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> Boolean sismember(<span style="color: rgba(0, 0, 255, 1)">final</span> String key, <span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String member) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.sismember(key, member);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> String spop(<span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> String key) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.spop(key);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> List&lt;String&gt; srandmember(<span style="color: rgba(0, 0, 255, 1)">final</span> String key,<span style="color: rgba(0, 0, 255, 1)">final</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> count) {
    ShardedJedis jedis </span>= <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> pool.getResource();
        </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> jedis.srandmember(key, count);
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.closeRedis(jedis);
    }
}

}
Zset 工具类

package com.qlchat.component.redis.template;

import com.alibaba.fastjson.JSON;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.Tuple;

import java.util.*;

/**
*

  • <b><code>ZSetRedisTemplate</code></b>

  • <p>

  • Sorted Sets 数据结构的常用方法封装,支持 Object 类型

  • </p>

  • <b>Creation Time:</b> 2016 年 10 月 12 日 下午 5:54:09

  • @author abin.yao

  • @since qlchat 1.0
    */
    public class ZSetRedisTemplate extends BasicRedisTemplate {

    /**

    • 加入 Sorted set, 如果 member 在 Set 里已存在, 只更新 score 并返回 false, 否则返回 true.
    • @param key
    • @param member
    • @param score
    • @return
    • @since qlchat 1.0
      */
      public Boolean zadd(String key, double score, String member) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      return jedis.zadd(key, score, member) == 1 ? true : false;
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • 加入 Sorted set, 如果 member 在 Set 里已存在, 只更新 score 并返回 false, 否则返回 true.
    • @param key
    • @param member
    • @param score
    • @param ttl 过期时间,秒
    • @return
    • @since qlchat 1.0
      */
      public Boolean zadd(final String key,final double score,final int ttl,final String member) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      Boolean ret
      = jedis.zadd(key, score, member) == 1 ? true : false;
      if (ret && ttl > 0) {
      jedis.expire(key, ttl);
      }
      return ret;
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • For Object, 加入 Sorted set, 如果 member 在 Set 里已存在, 只更新 score 并返回 false, 否则返回 true.
    • @param key
    • @param member
    • @param score
    • @return
    • @since qlchat 1.0
      */
      public Boolean zadd(String key, double score, Object member) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      // return jedis.zadd(key.getBytes(), score, HessianSerializer.serialize(member)) == 1 ? true : false;
      return jedis.zadd(key.getBytes(), score, toJsonByteArray(member)) == 1 ? true : false;
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • Return a range of members in a sorted set, by index. Ordered from the lowest to the highest score.
    • @param key
    • @param start
    • @param end
    • @return Ordered from the lowest to the highest score.
    • @since qlchat 1.0
      */
      public Set<String> zrange(String key, long start, long end) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      return jedis.zrange(key, start, end);
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • For Object, Return a range of members in a sorted set, by index.Ordered from the lowest to the highest score.
    • @param key
    • @param start
    • @param end
    • @return Ordered from the lowest to the highest score.
    • @since qlchat 1.0
      */
      public <T> List<T> zrange(String key, long start, long end, Class<T> clazz) {
      List
      <T> result = new ArrayList<>();
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      Set
      <byte[]> tempSet = jedis.zrange(key.getBytes(), start, end);
      if (tempSet != null && tempSet.size() > 0) {
      for (byte[] value : tempSet) {
      // result.add((T) HessianSerializer.deserialize(value));
      result.add(fromJsonByteArray(value, clazz));
      }
      return result;
      }
      return null;
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • Return a range of members in a sorted set, by index. Ordered from the highest to the lowest score.
    • @param key
    • @param start
    • @param end
    • @return Ordered from the highest to the lowest score.
    • @since qlchat 1.0
      */
      public Set<String> zrevrange(String key, long start, long end) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      return jedis.zrevrange(key, start, end);
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • For Object, Return a range of members in a sorted set, by index. Ordered from the highest to the lowest score.
    • @param key
    • @param start
    • @param end
    • @param clazz
    • @return Ordered from the highest to the lowest score.
    • @since qlchat 1.0
      */
      public <T> List<T> zrevrange(String key, long start, long end, Class<T> clazz) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      Set
      <byte[]> tempSet = jedis.zrevrange(key.getBytes(), start, end);
      if (tempSet != null && tempSet.size() > 0) {
      List
      <T> result = new ArrayList<>();
      for (byte[] value : tempSet) {
      // result.add((T) HessianSerializer.deserialize(value));
      result.add(fromJsonByteArray(value, clazz));
      }
      return result;
      }
      return null;
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • Return the all the elements in the sorted set at key with a score between
    • min and max (including elements with score equal to min or max).
    • @param key
    • @param min
    • @param max
    • @return Ordered from the lowest to the highest score.
    • @since qlchat 1.0
      */
      public Set<String> zrangeByScore(final String key, final double min, final double max) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      return jedis.zrangeByScore(key, min, max);
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • For Object, Return the all the elements in the sorted set at key with a score between
    • min and max (including elements with score equal to min or max).
    • @param key
    • @param min
    • @param max
    • @return Ordered from the lowest to the highest score.
    • @since qlchat 1.0
      */
      public <T> Set<T> zrangeHashSetByScore(final String key, final double min, final double max, Class<T> clazz) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      Set
      <byte[]> tempSet = jedis.zrangeByScore(key.getBytes(), min, max);
      if (tempSet != null && tempSet.size() > 0) {
      HashSet
      <T> result = new HashSet<T>();
      for (byte[] value : tempSet) {
      // result.add((T) HessianSerializer.deserialize(value));
      result.add(fromJsonByteArray(value, clazz));
      }
      return result;
      }
      return null;
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • Return the all the elements in the sorted set at key with a score between
    • min and max (including elements with score equal to min or max).
    • @param key
    • @param min
    • @param max
    • @return Ordered from the highest to the lowest score.
    • @since qlchat 1.0
      */
      public Set<String> zrevrangeByScore(final String key, final double min, final double max) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      return jedis.zrevrangeByScore(key, max, min);
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • For Object, Return the all the elements in the sorted set at key with a score between
    • min and max (including elements with score equal to min or max).
    • @param key
    • @param min
    • @param max
    • @return Ordered from the lowest to the highest score.
    • @since qlchat 1.0
      */
      public <T> List<T> zrangeByScore(final String key, final double min, final double max, Class<T> clazz) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      Set
      <byte[]> tempSet = jedis.zrangeByScore(key.getBytes(), min, max);
      if (tempSet != null && tempSet.size() > 0) {
      List
      <T> result = new ArrayList<>();
      for (byte[] value : tempSet) {
      result.add(fromJsonByteArray(value, clazz));
      }
      return result;
      }
      return null;
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    public <T> List<T> zrangeByScore(final String key, final double min, final double max, final int offset, final int count, Class<T> clazz) {
    ShardedJedis jedis
    = null;
    try {
    jedis
    = pool.getResource();
    Set
    <byte[]> tempSet = jedis.zrangeByScore(key.getBytes(), min, max, offset, count);
    if (tempSet != null && tempSet.size() > 0) {
    List
    <T> result = new ArrayList<>();
    for (byte[] value : tempSet) {
    result.add(fromJsonByteArray(value, clazz));
    }
    return result;
    }
    return null;
    }
    finally {
    this.closeRedis(jedis);
    }
    }

    /**

    • Return a range of members with scores in a sorted set, by index. Ordered from the lowest to the highest score.
    • @param key
    • @param start
    • @param end
    • @return
    • @since qlchat 1.0
      */
      public Set<Tuple> zrangeWithScores(final String key, final long start, final long end) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      return jedis.zrangeWithScores(key, start, end);
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • Return a range of members with scores in a sorted set, by index. Ordered from the highest to the lowest score.
    • @param key
    • @param start
    • @param end
    • @return
    • @since qlchat 1.0
      */
      public Set<Tuple> zrevrangeWithScores(final String key, final long start, final long end) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      return jedis.zrevrangeWithScores(key, start, end);
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • Return the all the elements in the sorted set at key with a score between
    • min and max (including elements with score equal to min or max). Ordered from the lowest to the highest score.
    • @param key
    • @param min
    • @param max
    • @return Ordered from the lowest to the highest score.
    • @since qlchat 1.0
      */
      public Set<Tuple> zrangeByScoreWithScores(final String key, final double min, final double max) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      return jedis.zrangeByScoreWithScores(key, min, max);
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    public Set<Tuple> zrangeByScoreWithScores(final String key, final double min, final double max, final int offset, final int count) {
    ShardedJedis jedis
    = null;
    try {
    jedis
    = pool.getResource();
    return jedis.zrangeByScoreWithScores(key, min, max, offset, count);
    }
    finally {
    this.closeRedis(jedis);
    }
    }

    /**

    • Return the all the elements in the sorted set at key with a score between
    • min and max (including elements with score equal to min or max). Ordered from the highest to the lowest score.
    • @param key
    • @param min
    • @param max
    • @return Ordered from the highest to the lowest score.
    • @since qlchat 1.0
      */
      public Set<Tuple> zrevrangeByScoreWithScores(final String key, final double min, final double max) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      return jedis.zrevrangeByScoreWithScores(key, max, min);
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    public Set<Tuple> zrevrangeByScoreWithScores(final String key, final double min, final double max, final int offset, final int count) {
    ShardedJedis jedis
    = null;
    try {
    jedis
    = pool.getResource();
    return jedis.zrevrangeByScoreWithScores(key, max, min, offset, count);
    }
    finally {
    this.closeRedis(jedis);
    }
    }

    /**

    • Remove one or more members from a sorted set
    • @param key
    • @param members
    • @return
    • @since qlchat 1.0
      */
      public Boolean zrem(final String key, final String... members) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      return jedis.zrem(key, members) == 1 ? true : false;
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • For Object, Remove one or more members from a sorted set
    • @param key
    • @param members
    • @return
    • @since qlchat 1.0
      */
      public Boolean zrem(final String key, final Object... members) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      byte[][] strings = new byte[members.length][];
      for (int j = 0; j < members.length; j++) {
      // strings[j] = HessianSerializer.serialize(members[j]);
      strings[j] = toJsonByteArray(members[j]);
      }
      return jedis.zrem(key.getBytes(), strings) == 1 ? true : false;
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • Get the score associated with the given member in a sorted set
    • @param key
    • @param member
    • @return
    • @since qlchat 1.0
      */
      public Double zscore(final String key, final String member) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      return jedis.zscore(key, member);
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • For ObjecGet the score associated with the given member in a sorted set
    • @param key
    • @param member
    • @return
    • @since qlchat 1.0
      */
      public Double zscore(final String key, final Object member) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      // return jedis.zscore(key.getBytes(), HessianSerializer.serialize(member));
      return jedis.zscore(key.getBytes(), toJsonByteArray(member));
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • Remove all elements in the sorted set at key with rank between start and
    • end. Start and end are 0-based with rank 0 being the element with the
    • lowest score. Both start and end can be negative numbers, where they
    • indicate offsets starting at the element with the highest rank. For
    • example: -1 is the element with the highest score, -2 the element with
    • the second highest score and so forth.
    • <p>
    • <b>Time complexity:</b> O(log(N))+O(M) with N being the number of
    • elements in the sorted set and M the number of elements removed by the
    • operation
    • @param key
    • @param start
    • @param end
    • @return
    • @since qlchat 1.0
      */
      public Long zremrangeByRank(String key, long start, long end) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      return jedis.zremrangeByRank(key, start, end);
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**
    *

    • Get the length of a sorted set
    • @param key
    • @param min
    • @param max
    • @return
    • @since qlchat 1.0
      */
      public Long zcount(final String key, final double min, final double max) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      return jedis.zcount(key, min, max);
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • Get the number of members in a sorted set
    • @param key key
    • @return Long
      */
      public Long zcard(final String key) {
      ShardedJedis jedis
      = null;
      try {
      jedis
      = pool.getResource();
      return jedis.zcard(key);
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    public <T> List<T> zrevrangeByScore(String key, double max, double min, Class<T> clazz) {
    List
    <T> result = new ArrayList<T>();
    ShardedJedis jedis
    = null;
    try {
    jedis
    = pool.getResource();
    Set
    <String> sets = jedis.zrevrangeByScore(key, max, min);
    if (null == sets || sets.size() == 0) {
    return result;
    }
    for (String s : sets) {
    result.add(JSON.parseObject(s, clazz));
    }
    }
    catch (Exception e) {
    e.printStackTrace();

     } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
         </span><span style="color: rgba(0, 0, 255, 1)">if</span>(jedis != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {jedis.close();}
     }
     </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
    

    }

    public <T> List<T> zrevrangeByScore(String key, double max, double min, int offset, int count, Class<T> clazz) {
    List
    <T> result = new ArrayList<T>();
    ShardedJedis jedis
    = null;
    try {
    jedis
    = pool.getResource();
    Set
    <String> sets = jedis.zrevrangeByScore(key, max, min, offset, count);
    if (null == sets || sets.size() == 0) {
    return result;
    }
    for (String s : sets) {
    result.add(JSON.parseObject(s, clazz));
    }
    }
    catch (Exception e) {
    e.printStackTrace();

     } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
         </span><span style="color: rgba(0, 0, 255, 1)">if</span>(jedis != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {jedis.close();}
     }
     </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
    

    }

    public List<String> zrevrangeByScore(String key, double max, double min, int offset, int count) {
    List
    <String> result = new ArrayList<>();
    ShardedJedis jedis
    = null;
    try {
    jedis
    = pool.getResource();
    Set
    <String> sets = jedis.zrevrangeByScore(key, max, min, offset, count);
    if (null == sets || sets.size() == 0) {
    return result;
    }
    for (String s : sets) {
    result.add(s);
    }
    }
    catch (Exception e) {
    e.printStackTrace();

     } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
         </span><span style="color: rgba(0, 0, 255, 1)">if</span>(jedis != <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {jedis.close();}
     }
     </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
    

    }

    public Set<String> zrangeByScore(String key, double max, double min, int offset, int count) {
    ShardedJedis jedis
    = null;
    try {
    jedis
    = pool.getResource();
    return jedis.zrangeByScore(key, min, max, offset, count);
    }
    finally {
    this.closeRedis(jedis);
    }
    }

    public Long zremrangeByScore(String key, double start, double end) {
    ShardedJedis jedis
    = null;
    try {
    jedis
    = pool.getResource();
    return jedis.zremrangeByScore(key, start, end);
    }
    finally {
    this.closeRedis(jedis);
    }
    }

    public Map<String,Object> zrevrankWithScore(String key,String element){
    ShardedJedis jedis
    = null;
    Map
    <String,Object> map = new HashMap<>();
    try{
    Long rankIndex
    = jedis.zrevrank(key,element);
    Double score
    = jedis.zscore(key,element);
    if(rankIndex != null && score >0){
    map.put(
    "rank",rankIndex+1);
    map.put(
    "score",score);
    }
    }
    catch (Exception e){
    e.printStackTrace();
    }
    finally {
    this.closeRedis(jedis);
    }
    return map;
    }
    }
    HyperLogLog 模板

package com.qlchat.component.redis.template;

import redis.clients.jedis.ShardedJedis;

/**

  • HyperLogLog 模板

  • Created by liujunjie on 16-12-15.
    */
    public class HyperLogLogTemplate extends BasicRedisTemplate {

    /**

    • 添加
    • @param key key
    • @param elements 元素
      */
      public Long pfadd(String key, String... elements) {
      ShardedJedis jedis
      = null;
      try{
      jedis
      = pool.getResource();
      return jedis.pfadd(key, elements);
      }
      finally {
      this.closeRedis(jedis);
      }
      }

    /**

    • 统计
    • @param key key
    • @return long
      */
      public long pfcount(String key) {
      ShardedJedis jedis
      = null;
      try{
      jedis
      = pool.getResource();
      return jedis.pfcount(key);
      }
      finally {
      this.closeRedis(jedis);
      }
      }

}