标签:
Java连接redis的使用示例
Redis是开源的key-value存储工具,redis通常用来存储结构化的数据,因为redis的key可以包含String、hash、listset和sorted list。
Redisserver目前最稳定的版本是2.8.9,可以到官网http://redis.io/download下载。根据机器的类型及位数下载对应的版本安装即可,reids支持linux和windows操作系统。
Redisclient支持多种语言,包括:c、C++、C#、php、java、python、go等语言,根据自己的开发语言,选择合适的redis client版本类型即可。我是使用java语言开发的,针对java语言,redis client也提供了多种客户端支持,按照推荐类型依次是:Jedis、Redisson、JRedis、JDBC-Redis、RJC、redis-protocol、aredis、lettuce。前两种类型是比较推荐的,我们采用了Redisson类型版本作为redisclient的使用。
Redisson的源码工程所在位置:https://github.com/mrniko/redisson。这里有使用示例及一些介绍,这里不再详细的介绍。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import redis.clients.jedis.Builder;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPipeline;
import redis.clients.jedis.ShardedJedisPool;
import redis.clients.util.SafeEncoder;
/**
* The RedisUtil represents
* @version $Id$
* @author fengjc
*/
public class RedisUtil {
/**
* 数据源
*/
private ShardedJedisPool shardedJedisPool;
/** ======================================Strings====================================== */
/**
* Set the string value as value of the key. The string can‘t be longer than
* 1073741824 bytes (1 GB).
* Time complexity: O(1)
* @param key
* @param value
* @return Status code reply
*/
public String setString(String key, String value) {
ShardedJedis jedis = this.shardedJedisPool.getResource();
String status = jedis.set(key, value);
this.shardedJedisPool.returnResource(jedis);
return status;
}
/**
* Get the value of the specified key. If the key does not exist the special
* value ‘nil‘ is returned. If the value stored at key is not a string an
* error is returned because GET can only handle string values.
* Time complexity: O(1)
* @param key
* @return Bulk reply
*/
public String getString(String key) {
ShardedJedis jedis = this.shardedJedisPool.getResource();
String value = jedis.get(key);
this.shardedJedisPool.returnResource(jedis);
return value;
}
/**
* This Stirng的批量更新
* @param pairs
*/
public List<Object> batchSetString(final List<Pair<String, String>> pairs) {
final ShardedJedis jedis = this.shardedJedisPool.getResource();
List<Object> status = jedis.pipelined(new ShardedJedisPipeline() {
@Override
public void execute() {
for (Pair<String, String> pair : pairs) {
set(pair.getKey(), pair.getValue());
}
}
});
this.shardedJedisPool.returnResource(jedis);
return status;
}
/**
* This String的批量获得
* @param keys
* @return
*/
public List<String> batchGetString(final List<String> keys) {
final ShardedJedis jedis = this.shardedJedisPool.getResource();
List<Object> dataList = jedis.pipelined(new ShardedJedisPipeline() {
@Override
public void execute() {
for (String key : keys) {
get(key);
}
}
});
this.shardedJedisPool.returnResource(jedis);
List<String> rtnDataList = new ArrayList<String>();
for (Object data : dataList) {
rtnDataList.add(STRING.build(data));
}
return rtnDataList;
}
/** ======================================Hashes====================================== */
/**
* Set the specified hash field to the specified value.
* If key does not exist, a new key holding a hash is created.
* Time complexity: O(1)
* @param key
* @param field
* @param value
* @return If the field already exists, and the HSET just produced an update
* of the value, 0 is returned, otherwise if a new field is created
* 1 is returned.
*/
public long hashSet(String key, String field, String value) {
ShardedJedis jedis = this.shardedJedisPool.getResource();
long count = jedis.hset(key, field, value);
this.shardedJedisPool.returnResource(jedis);
return count;
}
/**
* If key holds a hash, retrieve the value associated to the specified
* field.
* If the field is not found or the key does not exist, a special ‘nil‘
* value is returned.
* Time complexity:O(1)
* @param key
* @param field
* @return Bulk reply
*/
public String hashGet(String key, String field) {
ShardedJedis jedis = this.shardedJedisPool.getResource();
String value = jedis.hget(key, field);
this.shardedJedisPool.returnResource(jedis);
return value;
}
/**
* Set the respective fields to the respective values. HMSET replaces old
* values with new values.
* If key does not exist, a new key holding a hash is created.
* Time complexity: O(N) (with N being the number of fields)
* @param key
* @param hash
* @return Return OK or Exception if hash is empty
*/
public String hashMultipleSet(String key, Map<String, String> hash) {
ShardedJedis jedis = this.shardedJedisPool.getResource();
String status = jedis.hmset(key, hash);
this.shardedJedisPool.returnResource(jedis);
return status;
}
/**
* Retrieve the values associated to the specified fields.
* If some of the specified fields do not exist, nil values are returned.
* Non existing keys are considered like empty hashes.
* Time complexity: O(N) (with N being the number of fields)
* @param key
* @param fields
* @return Multi Bulk Reply specifically a list of all the values associated
* with the specified fields, in the same order of the request.
*/
public List<String> hashMultipleGet(String key, String... fields) {
ShardedJedis jedis = this.shardedJedisPool.getResource();
List<String> dataList = jedis.hmget(key, fields);
this.shardedJedisPool.returnResource(jedis);
return dataList;
}
/**
* This 批量的HashMultipleSet
* @param pairs
* @return
*/
public List<Object> batchHashMultipleSet(final List<Pair<String, Map<String, String>>> pairs) {
final ShardedJedis jedis = this.shardedJedisPool.getResource();
List<Object> status = jedis.pipelined(new ShardedJedisPipeline() {
@Override
public void execute() {
for (Pair<String, Map<String, String>> pair : pairs) {
hmset(pair.getKey(), pair.getValue());
}
}
});
this.shardedJedisPool.returnResource(jedis);
return status;
}
/**
* This 批量的HashMultipleGet
* @param pairs
* @return
*/
public List<List<String>> batchHashMultipleGet(final List<Pair<String, String[]>> pairs) {
final ShardedJedis jedis = this.shardedJedisPool.getResource();
List<Object> dataList = jedis.pipelined(new ShardedJedisPipeline() {
@Override
public void execute() {
for (Pair<String, String[]> pair : pairs) {
hmget(pair.getKey(), pair.getValue());
}
}
});
this.shardedJedisPool.returnResource(jedis);
List<List<String>> rtnDataList = new ArrayList<List<String>>();
for (Object data : dataList) {
rtnDataList.add(STRING_LIST.build(data));
}
return rtnDataList;
}
/**
* Return all the fields and associated values in a hash.
* Time complexity: O(N), where N is the total number of entries
* @param key
* @return All the fields and values contained into a hash.
*/
public Map<String, String> hashGetAll(String key) {
ShardedJedis jedis = this.shardedJedisPool.getResource();
Map<String, String> hash = jedis.hgetAll(key);
this.shardedJedisPool.returnResource(jedis);
return hash;
}
/**
* This 批量的hashMultipleGet
* @param keys
* @return
*/
public List<Map<String, String>> batchHashGetAll(final List<String> keys) {
final ShardedJedis jedis = this.shardedJedisPool.getResource();
List<Object> dataList = jedis.pipelined(new ShardedJedisPipeline() {
@Override
public void execute() {
for (String key : keys) {
hgetAll(key);
}
}
});
this.shardedJedisPool.returnResource(jedis);
List<Map<String, String>> rtnDataList = new ArrayList<Map<String, String>>();
for (Object data : dataList) {
rtnDataList.add(STRING_MAP.build(data));
}
return rtnDataList;
}
/** ======================================Builder====================================== */
public static final Builder<Double> DOUBLE = new Builder<Double>() {
@Override
public Double build(Object data) {
return Double.valueOf(STRING.build(data));
}
@Override
public String toString() {
return "double";
}
};
public static final Builder<Boolean> BOOLEAN = new Builder<Boolean>() {
@Override
public Boolean build(Object data) {
return ((Long) data) == 1;
}
@Override
public String toString() {
return "boolean";
}
};
public static final Builder<Long> LONG = new Builder<Long>() {
@Override
public Long build(Object data) {
return (Long) data;
}
@Override
public String toString() {
return "long";
}
};
public static final Builder<String> STRING = new Builder<String>() {
@Override
public String build(Object data) {
return SafeEncoder.encode((byte[]) data);
}
@Override
public String toString() {
return "string";
}
};
public static final Builder<List<String>> STRING_LIST = new Builder<List<String>>() {
@Override
@SuppressWarnings("unchecked")
public List<String> build(Object data) {
if (null == data) {
return null;
}
List<byte[]> l = (List<byte[]>) data;
final ArrayList<String> result = new ArrayList<String>(l.size());
for (final byte[] barray : l) {
if (barray == null) {
result.add(null);
} else {
result.add(SafeEncoder.encode(barray));
}
}
return result;
}
@Override
public String toString() {
return "List<String>";
}
};
public static final Builder<Map<String, String>> STRING_MAP = new Builder<Map<String, String>>() {
@Override
@SuppressWarnings("unchecked")
public Map<String, String> build(Object data) {
final List<byte[]> flatHash = (List<byte[]>) data;
final Map<String, String> hash = new HashMap<String, String>();
final Iterator<byte[]> iterator = flatHash.iterator();
while (iterator.hasNext()) {
hash.put(SafeEncoder.encode(iterator.next()), SafeEncoder.encode(iterator.next()));
}
return hash;
}
@Override
public String toString() {
return "Map<String, String>";
}
};
public static final Builder<Set<String>> STRING_SET = new Builder<Set<String>>() {
@Override
@SuppressWarnings("unchecked")
public Set<String> build(Object data) {
if (null == data) {
return null;
}
List<byte[]> l = (List<byte[]>) data;
final Set<String> result = new HashSet<String>(l.size());
for (final byte[] barray : l) {
if (barray == null) {
result.add(null);
} else {
result.add(SafeEncoder.encode(barray));
}
}
return result;
}
@Override
public String toString() {
return "Set<String>";
}
};
public static final Builder<Set<String>> STRING_ZSET = new Builder<Set<String>>() {
@Override
@SuppressWarnings("unchecked")
public Set<String> build(Object data) {
if (null == data) {
return null;
}
List<byte[]> l = (List<byte[]>) data;
final Set<String> result = new LinkedHashSet<String>(l.size());
for (final byte[] barray : l) {
if (barray == null) {
result.add(null);
} else {
result.add(SafeEncoder.encode(barray));
}
}
return result;
}
@Override
public String toString() {
return "ZSet<String>";
}
};
/** ======================================Other====================================== */
public void setShardedJedisPool(ShardedJedisPool shardedJedisPool) {
this.shardedJedisPool = shardedJedisPool;
}
/**
* This 构造Pair
* @param key
* @param value
* @return
*/
public <K, V> Pair<K, V> makePair(K key, V value) {
return new Pair<K, V>(key, value);
}
/**
* The Pair represents 键值对
* @version $Id$
* @author fengjc
* @param <K>
* @param <V>
*/
public class Pair<K, V> {
private K key;
private V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
public K getKey() {
return this.key;
}
public void setKey(K key) {
this.key = key;
}
public V getValue() {
return this.value;
}
public void setValue(V value) {
this.value = value;
}
}
}
原文参考:http://blog.csdn.net/wgw335363240/article/details/24471311
标签:
原文地址:http://www.cnblogs.com/mjzhang/p/5086696.html