1. 通过Redis官方提供Jedis客户端开发包(jedis-2.6.0.jar),对于不同的数据结构类型存取处理差异性比较大,针对性处理复杂性比较大,这里通过RedisUtil工具类相似化了各个数据类型的操作,从而简化了对于Redis使用的难度,降低了代码结构的复杂度,具体代码示例如下
import java.util.List;@b@import java.util.Map;@b@import java.util.Set;@b@import redis.clients.jedis.Jedis;@b@import redis.clients.jedis.JedisPool;@b@import redis.clients.jedis.Pipeline;@b@import redis.clients.jedis.Response;@b@import redis.clients.jedis.Transaction;@b@import redis.clients.jedis.Tuple;@b@@b@public class RedisUtils {@b@@b@ private JedisPool pool;@b@@b@ /**@b@ * Set the string value as value of the key. The string can't be longer than 1073741824 bytes (1@b@ * GB). Time complexity: O(1)@b@ *@b@ * @param key the key@b@ * @param value the value@b@ * @return string@b@ */@b@ public String setString(final String key, final String value) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.set(key, value);@b@ }@b@ });@b@ }@b@@b@ @b@ public String set(final byte[] key, final byte[] value) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.set(key, value);@b@ }@b@ });@b@ }@b@@b@ @b@ public String set(String key, Object value) {@b@ return set(key.getBytes(), SerializeUtils.serializeObject(value));@b@ }@b@@b@ @b@ public Long set(String key, Object value, int seconds) {@b@ set(key.getBytes(), SerializeUtils.serializeObject(value));@b@ return expire(key, seconds);@b@ }@b@@b@ @b@ public byte[] get(final byte[] key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<byte[]>() {@b@ public byte[] operate(Jedis jedis) {@b@ return jedis.get(key);@b@ }@b@ });@b@@b@ }@b@@b@ @b@ public Object get(String key) {@b@ return SerializeUtils.deserializeObject(get(key.getBytes()));@b@@b@ }@b@@b@ @b@ public Boolean exists(final String key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Boolean>() {@b@ public Boolean operate(Jedis jedis) {@b@ return jedis.exists(key);@b@ }@b@ });@b@ }@b@@b@@b@ @b@ public Boolean exists(final byte[] key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Boolean>() {@b@ public Boolean operate(Jedis jedis) {@b@ return jedis.exists(key);@b@ }@b@ });@b@ }@b@@b@ @b@ public Long expire(final String key, final int seconds) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.expire(key, seconds);@b@ }@b@ });@b@ }@b@@b@ @b@ public Long del(final String key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.del(key);@b@ }@b@ });@b@ }@b@@b@ @b@ public Long del(final byte[] key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.del(key);@b@ }@b@ });@b@ }@b@@b@ @b@ public String rename(final String oldkey, final String newkey) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.rename(oldkey, newkey);@b@ }@b@ });@b@ }@b@@b@ @b@ public Long renamenx(final String oldkey, final String newkey) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.renamenx(oldkey, newkey);@b@ }@b@ });@b@ }@b@@b@ @b@ public long dbsize() {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.dbSize();@b@ }@b@ });@b@ }@b@@b@ @b@ public String type(final String key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.type(key);@b@ }@b@ });@b@@b@ }@b@@b@ @b@ public Long sadd(final String key, final String... members) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.sadd(key, members);@b@ }@b@ });@b@ }@b@@b@ @b@ public Long sadd(final byte[] key, final byte[]... members) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.sadd(key, members);@b@ }@b@ });@b@ }@b@@b@ @b@ public Long srem(final String key, final String... members) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.srem(key, members);@b@ }@b@ });@b@ }@b@@b@ @b@ public Long srem(final byte[] key, final byte[]... members) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.srem(key, members);@b@ }@b@ });@b@ }@b@@b@ @b@ public Long scard(final String key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.scard(key);@b@ }@b@ });@b@ }@b@@b@ @b@ public Set<String> smembers(final String key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Set<String>>() {@b@@b@ public Set<String> operate(Jedis jedis) {@b@ return jedis.smembers(key);@b@ }@b@ });@b@ }@b@@b@ @b@ public Boolean sismember(final String key, final String member) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Boolean>() {@b@@b@ public Boolean operate(Jedis jedis) {@b@ return jedis.sismember(key, member);@b@ }@b@ });@b@ }@b@@b@ @b@ public Set<String> sinter(final String... keys) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Set<String>>() {@b@@b@ public Set<String> operate(Jedis jedis) {@b@ return jedis.sinter(keys);@b@ }@b@ });@b@@b@ }@b@@b@ @b@ public Set<String> sunion(final String... keys) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Set<String>>() {@b@@b@ public Set<String> operate(Jedis jedis) {@b@ return jedis.sunion(keys);@b@ }@b@ });@b@@b@ }@b@@b@ @b@ public Set<String> sdiff(final String... keys) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Set<String>>() {@b@@b@ public Set<String> operate(Jedis jedis) {@b@ return jedis.sdiff(keys);@b@ }@b@ });@b@@b@ }@b@ @b@ public Set<String> keys(final String pattern) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Set<String>>() {@b@@b@ public Set<String> operate(Jedis jedis) {@b@ return jedis.keys(pattern);@b@ }@b@ });@b@@b@ }@b@@b@ @b@ public Long expireAt(final String key, final long unixTime) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.expireAt(key, unixTime);@b@ }@b@ });@b@ }@b@@b@ @b@ public Long ttl(final String key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.ttl(key);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @param value@b@ * @return@b@ */@b@ public Long setnx(final String key, final String value) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.setnx(key, value);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param keys@b@ * @return@b@ */@b@ public List<String> mget(final String... keys) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<List<String>>() {@b@@b@ public List<String> operate(Jedis jedis) {@b@ return jedis.mget(keys);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param keysvalues@b@ * @return@b@ */@b@ public String mset(final String... keysvalues) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.mset(keysvalues);@b@ }@b@ });@b@@b@ }@b@@b@ /**@b@ * @b@ * @param keys@b@ * @return@b@ */@b@ public Long msetnx(final String... keys) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.msetnx(keys);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @param field@b@ * @param value@b@ * @return@b@ */@b@ public Long hset(final String key, final String field, final String value) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.hset(key, field, value);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * Hset long.@b@ *@b@ * @param key the key@b@ * @param field the field@b@ * @param value the value@b@ * @return the long@b@ */@b@ public Long hset(final byte[] key, final byte[] field, final byte[] value) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.hset(key, field, value);@b@ }@b@ });@b@ }@b@@b@ public Response<Long> hsetpipe(final byte[] key, final byte[] field, final byte[] value) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Response<Long>>() {@b@@b@ public Response<Long> operate(Jedis jedis) {@b@ Pipeline pipeline = jedis.pipelined();@b@ return pipeline.hset(key, field, value);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @param field@b@ * @param value@b@ * @return@b@ */@b@ public Long hsetnx(final String key, final String field, final String value) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.hsetnx(key, field, value);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @param field@b@ * @param value@b@ * @return@b@ */@b@ public Long hsetnx(final byte[] key, final byte[] field, final byte[] value) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.hsetnx(key, field, value);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @param hash@b@ * @return@b@ */@b@ public String hmset(final String key, final Map<String, String> hash) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.hmset(key, hash);@b@ }@b@ });@b@ }@b@@b@ public String hmset(final byte[] key, final Map<byte[], byte[]> hash) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.hmset(key, hash);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @param field@b@ * @return@b@ */@b@ public String hget(final String key, final String field) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.hget(key, field);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * Hget byte [ ].@b@ *@b@ * @param key the key@b@ * @param field the field@b@ * @return the byte [ ]@b@ */@b@ public byte[] hget(final byte[] key, final byte[] field) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<byte[]>() {@b@@b@ public byte[] operate(Jedis jedis) {@b@ return jedis.hget(key, field);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @param fields@b@ * @return@b@ */@b@ public List<String> hmget(final String key, final String... fields) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<List<String>>() {@b@@b@ public List<String> operate(Jedis jedis) {@b@ return jedis.hmget(key, fields);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @return@b@ */@b@ public Map<String, String> hgetall(final String key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Map<String, String>>() {@b@@b@ public Map<String, String> operate(Jedis jedis) {@b@ return jedis.hgetAll(key);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * Hgetall map.@b@ *@b@ * @param key the key@b@ * @return the map@b@ */@b@ public Map<byte[], byte[]> hgetall(final byte[] key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Map<byte[], byte[]>>() {@b@@b@ public Map<byte[], byte[]> operate(Jedis jedis) {@b@ return jedis.hgetAll(key);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @param fields@b@ * @return@b@ */@b@ public Long hdel(final String key, final String... fields) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.hdel(key, fields);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * Hdel long.@b@ *@b@ * @param key the key@b@ * @param fields the fields@b@ * @return the long@b@ */@b@ public Long hdel(final byte[] key, final byte[]... fields) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.hdel(key, fields);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @return@b@ */@b@ public Long hlen(final String key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.hlen(key);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @param field@b@ * @return@b@ */@b@ public boolean hexists(final String key, final String field) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Boolean>() {@b@@b@ public Boolean operate(Jedis jedis) {@b@ return jedis.hexists(key, field);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @param field@b@ * @param value@b@ * @return@b@ */@b@ public Long hincrby(final String key, final String field, final long value) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.hincrBy(key, field, value);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * Hincrbyfloat double.@b@ *@b@ * @param key the key@b@ * @param field the field@b@ * @param value the value@b@ * @return the double@b@ */@b@ public Double hincrbyfloat(final String key, final String field, final long value) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Double>() {@b@@b@ public Double operate(Jedis jedis) {@b@ return jedis.hincrByFloat(key, field, value);@b@ }@b@ });@b@@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @return@b@ */@b@ public Set<String> hkeys(final String key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Set<String>>() {@b@@b@ public Set<String> operate(Jedis jedis) {@b@ return jedis.hkeys(key);@b@ }@b@ });@b@@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @return@b@ */@b@ public List<String> hvals(final String key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<List<String>>() {@b@@b@ public List<String> operate(Jedis jedis) {@b@ return jedis.hvals(key);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @param seconds@b@ * @param value@b@ * @return@b@ */@b@ public String setex(final String key, final int seconds, final String value) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.setex(key, seconds, value);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @return@b@ */@b@ public Long incr(final String key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.incr(key);@b@ }@b@ });@b@@b@ }@b@@b@ /**@b@ * Incr by.@b@ *@b@ * @param key the key@b@ * @param step the step@b@ * @return the long@b@ */@b@ public Long incrBy(final String key, final Long step) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.incrBy(key, step);@b@ }@b@ });@b@@b@ }@b@@b@ /**@b@ * Incr long.@b@ *@b@ * @param key the key@b@ * @return the long@b@ */@b@ public Long incr(final byte[] key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.incr(key);@b@ }@b@ });@b@@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @param value@b@ * @return@b@ */@b@ public Long append(final String key, final String value) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.append(key, value);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @param start@b@ * @param end@b@ * @return@b@ */@b@ public String substr(final String key, final int start, final int end) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.substr(key, start, end);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @param strings@b@ * @return@b@ */@b@ public Long rpush(final String key, final String... strings) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.rpush(key, strings);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @param bytes@b@ * @return@b@ */@b@ public Long rpush(final byte[] key, final byte[]... bytes) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.rpush(key, bytes);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @param strings@b@ * @return@b@ */@b@ public long lpush(final String key, final String... strings) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.lpush(key, strings);@b@ }@b@ });@b@ }@b@@b@ public long lpush(final byte[] key, final byte[]... strings) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.lpush(key, strings);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * Rpop string.@b@ *@b@ * @param key the key@b@ * @return the string@b@ */@b@ public String rpop(final String key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.rpop(key);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * Rpoplpush string.@b@ *@b@ * @param source the source@b@ * @param destination the destination@b@ * @return the string@b@ */@b@ public String rpoplpush(final String source, final String destination) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.rpoplpush(source, destination);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * Lpop string.@b@ *@b@ * @param key the key@b@ * @return the string@b@ */@b@ public String lpop(final String key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.lpop(key);@b@ }@b@ });@b@ }@b@@b@ public byte[] lpop(final byte[] key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<byte[]>() {@b@@b@ public byte[] operate(Jedis jedis) {@b@ return jedis.lpop(key);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * Lpushpipe response.@b@ *@b@ * @param key the key@b@ * @param strings the strings@b@ * @return the response@b@ */@b@ public Response<Long> lpushpipe(final String key, final String... strings) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Response<Long>>() {@b@@b@ public Response<Long> operate(Jedis jedis) {@b@ Pipeline pipeline = jedis.pipelined();@b@@b@ Response<Long> response = pipeline.lpush(key, strings);@b@ pipeline.sync();@b@@b@ return response;@b@ }@b@ });@b@ }@b@@b@ /**@b@ * Rpushpipe response.@b@ *@b@ * @param key the key@b@ * @param strings the strings@b@ * @return the response@b@ */@b@ public Response<Long> rpushpipe(final String key, final String... strings) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Response<Long>>() {@b@@b@ public Response<Long> operate(Jedis jedis) {@b@ Pipeline pipeline = jedis.pipelined();@b@@b@ Response<Long> response = pipeline.rpush(key, strings);@b@ pipeline.sync();@b@@b@ return response;@b@ }@b@ });@b@ }@b@@b@ /**@b@ * Rpushpipe response.@b@ *@b@ * @param key the key@b@ * @param strings the strings@b@ * @return the response@b@ */@b@ public Response<Long> rpushpipe(final byte[] key, final byte[]... strings) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Response<Long>>() {@b@@b@ public Response<Long> operate(Jedis jedis) {@b@ Pipeline pipeline = jedis.pipelined();@b@@b@ Response<Long> response = pipeline.rpush(key, strings);@b@ pipeline.sync();@b@@b@ return response;@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param seconds@b@ * @param key@b@ * @param strings@b@ * @return@b@ */@b@ public Long lpush(int seconds, String key, String... strings) {@b@ lpush(key, strings);@b@ return expire(key, seconds);@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @return@b@ */@b@ public Long llen(final String key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.llen(key);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @return@b@ */@b@ public Long llen(final byte[] key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.llen(key);@b@ }@b@ });@b@ }@b@@b@ public List<String> lrange(final String key, final long start, final long end) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<List<String>>() {@b@@b@ public List<String> operate(Jedis jedis) {@b@ return jedis.lrange(key, start, end);@b@ }@b@ });@b@ }@b@@b@ public List<byte[]> lrange(final byte[] key, final long start, final long end) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<List<byte[]>>() {@b@@b@ public List<byte[]> operate(Jedis jedis) {@b@ return jedis.lrange(key, start, end);@b@ }@b@ });@b@ }@b@@b@ public List<String> lrangetrim(final String key, final long start, final long end) {@b@ return this.executeInTx(new TransactionalOperation<List<String>>() {@b@@b@ public List<String> operation(Transaction tx) {@b@ Response<List<String>> result = tx.lrange(key, start, end);@b@ tx.ltrim(key, end + 1, -1);@b@ tx.exec();@b@ return result.get();@b@ }@b@ });@b@ }@b@@b@ public List<byte[]> lrangetrim(final byte[] key, final long start, final long end) {@b@ return this.executeInTx(new TransactionalOperation<List<byte[]>>() {@b@@b@ public List<byte[]> operation(Transaction tx) {@b@ Response<List<byte[]>> result = tx.lrange(key, start, end);@b@ tx.ltrim(key, end + 1, -1);@b@ tx.exec();@b@ return result.get();@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @param key@b@ * @param start@b@ * @param end@b@ * @return@b@ */@b@ public String ltrim(final String key, final long start, final long end) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.ltrim(key, start, end);@b@ }@b@ });@b@ }@b@@b@ public String lindex(final String key, final long index) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.lindex(key, index);@b@ }@b@ });@b@ }@b@@b@ public String lset(final String key, final long index, final String value) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.lset(key, index, value);@b@ }@b@ });@b@ }@b@@b@ public Long lrem(final String key, final long count, final String value) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.lrem(key, count, value);@b@ }@b@ });@b@ }@b@@b@ public Long lrem(final byte[] key, final long count, final byte[] value) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.lrem(key, count, value);@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ * @return@b@ */@b@ public boolean isconnect() {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Boolean>() {@b@@b@ public Boolean operate(Jedis jedis) {@b@ return jedis.isConnected();@b@ }@b@ });@b@ }@b@@b@ /**@b@ * @b@ */@b@ public void disconnect() {@b@ new JedisPoolOperationTemplate(pool).doOperation(new Operation<Object>() {@b@@b@ public Object operate(Jedis jedis) {@b@ jedis.disconnect();@b@ return null;@b@ }@b@ });@b@@b@ }@b@@b@ public String getString(final String key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.get(key);@b@ }@b@ });@b@ }@b@@b@ public <T> T executeInTx(final TransactionalOperation<T> operation) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<T>() {@b@@b@ public T operate(Jedis jedis) {@b@@b@ Transaction tx = jedis.multi();@b@ return operation.operation(tx);@b@ }@b@ });@b@ }@b@@b@ public Map<String, String> hgetAll(final String key) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Map<String, String>>() {@b@@b@ public Map<String, String> operate(Jedis jedis) {@b@ return jedis.hgetAll(key);@b@ }@b@ });@b@ }@b@@b@ public String brpoplpush(final String source, final String destination, final int timeout) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<String>() {@b@@b@ public String operate(Jedis jedis) {@b@ return jedis.brpoplpush(source, destination, timeout);@b@ }@b@ });@b@ }@b@@b@ public byte[] brpoplpush(final byte[] source, final byte[] destination, final int timeout) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<byte[]>() {@b@@b@ public byte[] operate(Jedis jedis) {@b@ return jedis.brpoplpush(source, destination, timeout);@b@ }@b@ });@b@ }@b@@b@ public Long zadd(final byte[] key, final double score, final byte[] member) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.zadd(key, score, member);@b@ }@b@ });@b@ }@b@@b@ public Long zadd(final String key, final double score, final String member) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.zadd(key, score, member);@b@ }@b@ });@b@ }@b@@b@ public Set<String> zrangebyscore(final String key, final Double min, final Double max) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Set<String>>() {@b@@b@ public Set<String> operate(Jedis jedis) {@b@ return jedis.zrangeByScore(key, min, max);@b@ }@b@ });@b@ }@b@@b@ public Set<Tuple> zrangebyscorewithscores(final String key, final Double min, final Double max) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Set<Tuple>>() {@b@@b@ public Set<Tuple> operate(Jedis jedis) {@b@ return jedis.zrangeByScoreWithScores(key, min, max);@b@ }@b@ });@b@ }@b@@b@ public Set<String> zrevrangebyscore(final String key, final Double min, final Double max) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Set<String>>() {@b@@b@ public Set<String> operate(Jedis jedis) {@b@ return jedis.zrevrangeByScore(key, min, max);@b@ }@b@ });@b@ }@b@@b@ public Set<Tuple> zrevrangebyscorewithscores(final String key, final Double min, final Double max) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Set<Tuple>>() {@b@@b@ public Set<Tuple> operate(Jedis jedis) {@b@ return jedis.zrevrangeByScoreWithScores(key, min, max);@b@ }@b@ });@b@ }@b@@b@ public Long zremrangebyscore(final String key, final Double min, final Double max) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.zremrangeByScore(key, min, max);@b@ }@b@ });@b@ }@b@@b@ public Long zrank(final String key, final String member) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.zrank(key, member);@b@ }@b@ });@b@ }@b@@b@ public Long zremrangebyrank(final String key, final Long start, final Long end) {@b@ return new JedisPoolOperationTemplate(pool).doOperation(new Operation<Long>() {@b@@b@ public Long operate(Jedis jedis) {@b@ return jedis.zremrangeByRank(key, start, end);@b@ }@b@ });@b@ }@b@@b@ private static class JedisPoolOperationTemplate {@b@@b@ // private JedisSentinelPool jedisPool;@b@ private JedisPool jedisPool;@b@@b@ /**@b@ * Instantiates a new Jedis pool operation template.@b@ *@b@ * @param jedisPool the jedis pool@b@ */@b@ // public JedisPoolOperationTemplate(JedisSentinelPool jedisPool) {@b@ // this.jedisPool = jedisPool;@b@ // }@b@@b@ public JedisPoolOperationTemplate(JedisPool jedisPool) {@b@ this.jedisPool = jedisPool;@b@ }@b@@b@ /**@b@ * Do operation.@b@ *@b@ * @param operation the operation@b@ * @return the t@b@ */@b@ public <T> T doOperation(Operation<T> operation) {@b@ Jedis jedis = jedisPool.getResource();@b@ try {@b@ return operation.operate(jedis);@b@ } catch (Exception e) {@b@ return null;@b@ } finally {@b@ jedisPool.returnResource(jedis);@b@ }@b@ }@b@ }@b@@b@ /**@b@ * The interface Operation.@b@ */@b@ public static interface Operation<T> {@b@@b@ /**@b@ * Operate t.@b@ *@b@ * @param jedis the jedis@b@ * @return the t@b@ */@b@ public T operate(Jedis jedis);@b@ }@b@@b@ /**@b@ * The interface Transactional operation.@b@ */@b@ public static interface TransactionalOperation<T> {@b@@b@ /**@b@ * Operation t.@b@ *@b@ * @param tx the tx@b@ * @return the t@b@ */@b@ public T operation(Transaction tx);@b@ }@b@@b@ public void setPool(JedisPool pool) {@b@ this.pool = pool;@b@ }@b@@b@}
2. 依赖类SerializeUtils、JedisPoolFactoryBean
SerializeUtils.java
import java.io.ByteArrayInputStream;@b@import java.io.ByteArrayOutputStream;@b@import java.io.ObjectInputStream;@b@import java.io.ObjectOutputStream;@b@@b@public class SerializeUtils {@b@ @b@ public static byte[] serializeObject(Object obj) { @b@ ByteArrayOutputStream byteOutputStream = null;@b@ ObjectOutputStream objectOutputStream = null;@b@ @b@ try{@b@ byteOutputStream = new ByteArrayOutputStream();@b@ objectOutputStream = new ObjectOutputStream(byteOutputStream);@b@ @b@ objectOutputStream.writeObject(obj);@b@ objectOutputStream.flush();@b@ @b@ return byteOutputStream.toByteArray();@b@ }catch(Exception e){@b@ e.printStackTrace();@b@ } finally {@b@ if(null != objectOutputStream){@b@ try{@b@ objectOutputStream.close();@b@ byteOutputStream.close();@b@ }catch(Exception e){@b@ e.printStackTrace();@b@ }@b@ }@b@ } @b@ @b@ return null;@b@ }@b@ @b@ public static Object deserializeObject(byte[] bytes) {@b@ ByteArrayInputStream byteInputStream = null;@b@ ObjectInputStream objectInputStream = null;@b@ @b@ try{@b@ byteInputStream = new ByteArrayInputStream(bytes);@b@ objectInputStream = new ObjectInputStream(byteInputStream);@b@ @b@ return objectInputStream.readObject();@b@ @b@ }catch(Exception e){@b@ e.printStackTrace();@b@ }finally {@b@ if(null != objectInputStream){@b@ try{@b@ objectInputStream.close();@b@ byteInputStream.close();@b@ }catch(Exception e){@b@ e.printStackTrace();@b@ }@b@ }@b@ }@b@ return null;@b@ }@b@ @b@}
JedisPoolFactoryBean.java
import org.springframework.beans.factory.FactoryBean;@b@import redis.clients.jedis.JedisPool;@b@import redis.clients.jedis.JedisPoolConfig;@b@@b@public class JedisPoolFactoryBean implements FactoryBean<JedisPool> {@b@@b@ private JedisPoolConfig poolConfig;@b@ private String host;@b@ private String password;@b@ private Integer timeout;@b@ private Integer port;@b@ private Integer database;@b@@b@ public void setPoolConfig(JedisPoolConfig poolConfig) {@b@ this.poolConfig = poolConfig;@b@ }@b@@b@ public void setHost(String host) {@b@ this.host = host;@b@ }@b@@b@ public void setPassword(String password) {@b@ this.password = password;@b@ }@b@@b@ public void setTimeout(Integer timeout) {@b@ this.timeout = timeout;@b@ }@b@@b@ public void setPort(Integer port) {@b@ this.port = port;@b@ }@b@@b@ public void setDatabase(Integer database) {@b@ this.database = database;@b@ }@b@@b@ public JedisPool getObject() throws Exception {@b@ JedisPool jp = new JedisPool(poolConfig,host,port,timeout,password,database);@b@ return jp;@b@ }@b@@b@ public Class<?> getObjectType() {@b@ return JedisPool.class;@b@ }@b@@b@ public boolean isSingleton() {@b@ return true;@b@ }@b@@b@}
3. spring-redis.xml配置
<?xml version="1.0" encoding="UTF-8"?>@b@<beans xmlns="http://www.springframework.org/schema/beans"@b@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"@b@ xsi:schemaLocation="http://www.springframework.org/schema/beans @b@@b@ <!-- POOL配置 -->@b@ <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">@b@ <!-- <property name="maxActive" value="${redis.pool.maxActive}" /> -->@b@ <!-- <property name="maxWait" value="${redis.pool.maxWait}" /> -->@b@ <property name="maxIdle" value="${redis.pool.maxIdle}" />@b@ <property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />@b@ </bean>@b@@b@ <bean id="jedisPool" class="com.xwood.redis.JedisPoolFactoryBean">@b@ <property name="poolConfig" ref="jedisPoolConfig" />@b@ <property name="host" value="${redis.ip1}" />@b@ <property name="password">@b@ <null />@b@ </property>@b@ <!-- <property name="password" value="${redis.password}" /> -->@b@ <property name="port" value="${redis.port1}" />@b@ <property name="timeout" value="${redis.timeout}" />@b@ <property name="database" value="${redis.database}" />@b@ </bean>@b@@b@@b@ <bean id="redisUtils" class="com.xwood.redis.util.RedisUtils">@b@ <property name="pool" ref="jedisPool" />@b@ </bean>@b@@b@</beans>
4. config.properties配置内容
redis.pool.maxActive=500@b@redis.pool.maxWait=1000@b@redis.pool.maxIdle=10000@b@redis.pool.testOnBorrow=false@b@redis.ip1=127.0.0.1@b@#redis.ip1=127.0.0.1@b@redis.password=@b@redis.port1=6379@b@redis.timeout=100000@b@redis.database=0
5. pom.xml依赖项
<dependency>@b@ <groupId>redis.clients</groupId>@b@ <artifactId>jedis</artifactId>@b@ <version>2.6.0</version>@b@ </dependency>