redis连接池实例

来源:互联网 发布:c语言数组定义规则 编辑:程序博客网 时间:2024/05/16 07:15


redis.properties

redis.pool.maxTotal=20redis.pool.maxIdle=5redis.pool.maxWaitMillis=10001redis.host=192.168.0.130redis.port=6301redis.password=rootredis.timeout=60000

读取属性文件类PropertiesUtils.java

package com.eastcom.first.spark.data.redis;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class PropertiesUtils {private static Properties props = new Properties();static {try {String redisPropertiesFileDir = System.getProperty("user.dir") + File.separator + "config/redis.properties";InputStream in = new FileInputStream(new File(redisPropertiesFileDir));props.load(in);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public static String getValue(String key) {return props.getProperty(key);}public static void updateProperties(String key, String value) {props.setProperty(key, value);}}

建立redis连接池类JedisClientPool.java

package com.eastcom.first.spark.data.redis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;public class JedisClientPool {public static JedisClientPool jedisClientPool = getInstance();private static JedisPool jedisPool;private static int maxTotal;private static int maxIdle;private static int maxWaitMillis;public static JedisClientPool getInstance() {if (null == jedisClientPool) {synchronized (JedisClientPool.class) {if (null == jedisClientPool) {jedisClientPool = new JedisClientPool();}return jedisClientPool;}}return jedisClientPool;}private JedisClientPool() {if (null == jedisPool) {init();}}public static JedisPool getJedisPool() {return jedisPool;}public static void setJedisPool(JedisPool jedisPool) {JedisClientPool.jedisPool = jedisPool;}/** * 初始化jedis连接池 */private static void init() {maxTotal = Integer.parseInt(PropertiesUtils.getValue("redis.pool.maxTotal"));maxIdle = Integer.parseInt(PropertiesUtils.getValue("redis.pool.maxIdle"));maxWaitMillis = Integer.parseInt(PropertiesUtils.getValue("redis.pool.maxWaitMillis"));String host = PropertiesUtils.getValue("redis.host");// "localhost";int port = Integer.parseInt(PropertiesUtils.getValue("redis.port"));// 6379;int timeout = Integer.parseInt(PropertiesUtils.getValue("redis.timeout"));// 60000;String password = PropertiesUtils.getValue("redis.password");// 60000;JedisPoolConfig jedisPoolConfig = initPoolConfig();// 构造连接池jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password);}/** * 初始化Jedis *  * @return */private static JedisPoolConfig initPoolConfig() {// JedisPoolConfig 继承了 GenericObjectPoolConfigJedisPoolConfig jedisPoolConfig = new JedisPoolConfig();// #最大分配的对象数 :控制一个pool最多有多少个状态为idle的jedis实例jedisPoolConfig.setMaxTotal(maxTotal);// 控制一个pool可分配多少个jedis实例,通过pool.getResource()来获取// 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)jedisPoolConfig.setMaxIdle(maxIdle);// 当池内没有返回对象时,最大等待时间 : 超时时间jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);// 当调用borrow Object方法时,是否进行有效性检查:// 在borrow一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的;jedisPoolConfig.setTestOnBorrow(true);// 当调用return Object方法时,是否进行有效性检查 :在还给pool时,是否提前进行validate操作jedisPoolConfig.setTestOnReturn(true);return jedisPoolConfig;}}

操作redis的方法类JedisClient.java

package com.eastcom.first.spark.data.redis;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.concurrent.ConcurrentHashMap;import org.junit.Test;import redis.clients.jedis.Jedis;public class JedisClient {/** * 字符串增加 *  * @param key * @param value */@SuppressWarnings({ "static-access", "deprecation" })public static void addString(String key, String value) {Jedis redisClient = null;try {redisClient = JedisClientPool.getInstance().getJedisPool().getResource();value = SerializeUtil.isNullOrEmpty(value) ? "" : value;redisClient.set(key, value);} catch (Exception e) {// 销毁对象JedisClientPool.getInstance().getJedisPool().returnBrokenResource(redisClient);} finally {// 还原到连接池JedisClientPool.getInstance().getJedisPool().returnResource(redisClient);}}/** * 获取String值 *  * @param key * @return value */public static String getString(String key) {Jedis redisClient = null;try {redisClient = JedisClientPool.getInstance().getJedisPool().getResource();return redisClient.get(key);} catch (Exception e) {// 销毁对象JedisClientPool.getInstance().getJedisPool().returnBrokenResource(redisClient);} finally {// 还原到连接池JedisClientPool.getInstance().getJedisPool().returnResource(redisClient);}return null;}/** * 保存数据 类型为 Map *  * @param flag * @param mapData */public static void setMapDataToRedis(String flag, Map<String, String> mapData) {Jedis redisClient = null;try {redisClient = JedisClientPool.getInstance().getJedisPool().getResource();redisClient.hmset(flag, mapData);} catch (Exception e) {// 销毁对象JedisClientPool.getInstance().getJedisPool().returnBrokenResource(redisClient);} finally {// 还原到连接池JedisClientPool.getInstance().getJedisPool().returnResource(redisClient);}}/** * 保存数据 类型为 key-value *  * @param flag * @param field * @param value */public static void setDataToRedis(String flag, String field, String value) {Jedis redisClient = null;try {redisClient = JedisClientPool.getInstance().getJedisPool().getResource();redisClient.hset(flag, field, value);} catch (Exception e) {// 销毁对象JedisClientPool.getInstance().getJedisPool().returnBrokenResource(redisClient);} finally {// 还原到连接池JedisClientPool.getInstance().getJedisPool().returnResource(redisClient);}}/** * 获取Map数据 *  * @param flag * @return */public static Map<String, String> getMapData(String key) {Map<String, String> dataMap = null;Jedis redisClient = null;try {redisClient = JedisClientPool.getInstance().getJedisPool().getResource();dataMap = redisClient.hgetAll(key);} catch (Exception e) {// 销毁对象JedisClientPool.getInstance().getJedisPool().returnBrokenResource(redisClient);} finally {// 还原到连接池JedisClientPool.getInstance().getJedisPool().returnResource(redisClient);}return dataMap;}/** * 删除 *  * @param flag * @return */public static long deleteData(String key) {long result = 0;Jedis redisClient = null;try {redisClient = JedisClientPool.getInstance().getJedisPool().getResource();result = redisClient.del(key);} catch (Exception e) {// 销毁对象JedisClientPool.getInstance().getJedisPool().returnBrokenResource(redisClient);} finally {// 还原到连接池JedisClientPool.getInstance().getJedisPool().returnResource(redisClient);}return result;}/** * 根据key和字段获取数据 *  * @param flag * @param field * @return */public static String getData(String key, String value) {String data = null;Jedis redisClient = null;try {redisClient = JedisClientPool.getInstance().getJedisPool().getResource();data = redisClient.hget(key, value);} catch (Exception e) {// 销毁对象JedisClientPool.getInstance().getJedisPool().returnBrokenResource(redisClient);} finally {// 还原到连接池JedisClientPool.getInstance().getJedisPool().returnResource(redisClient);}return data;}// String 测试@Testpublic void testString() {Jedis redis = JedisClientPool.getInstance().getJedisPool().getResource();redis.set("str1", "str_values1");System.out.println(redis.get("str1"));// 显示所有值Set keys = redis.keys("*");// 列出所有的keyIterator it = keys.iterator();while (it.hasNext()) {Object obj1 = it.next();System.out.println(obj1);}}// map 测试@Testpublic static void testMap() {// 同时将多个field - value(域-值)对设置到哈希表key中。Map<String, String> map = new ConcurrentHashMap<String, String>();for (int i = 0; i < 10000; i++) {map.put("field" + i, "value" + i);}if (null != getData("table", "field1")) {deleteData("map");}// 得到map下面的username的值setMapDataToRedis("map", map);Map<String, String> maps = getMapData("map");for (String key : maps.keySet()) {System.out.println("key= " + key + " and value= " + map.get(key));}System.out.println(maps.size());}public static void main(String[] args) {// Jedis jedis = new Jedis("127.0.0.1", 6379);Jedis redisClient = JedisClientPool.getInstance().getJedisPool().getResource();// 权限认证redisClient.set("bb", "bb");testMap();}}

测试redis操作

package com.eastcom.first.spark.data.redis;import redis.clients.jedis.Jedis;public class TestRedisClient {public static void main(String[] args) {// Jedis jedis = new Jedis("127.0.0.1", 6379);Jedis redisClient = JedisClientPool.getInstance().getJedisPool().getResource();// 权限认证// redisClient.set("bb", "bb");System.out.println(redisClient.dbSize());JedisClient jClient = new JedisClient();jClient.testMap();jClient.testString();}}



over


以下有封装了redis操作的类RedisProxy.java

package com.eastcom.first.spark.data.redis;import java.util.List;import java.util.Map;import java.util.Set;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import redis.clients.jedis.Jedis;import redis.clients.jedis.Pipeline;import redis.clients.jedis.Tuple;import redis.clients.jedis.exceptions.JedisException;import redis.clients.util.Pool;/** * Redis代理类 *  * 操作redis数据库的 方法集合 *  * @author Louyj * */@SuppressWarnings("deprecation")public class RedisProxy {protected final Logger logger = LoggerFactory.getLogger(getClass());private Pool<Jedis> jedisPool;public void setJedisPool(Pool<Jedis> jedisPool) {this.jedisPool = jedisPool;}public Pool<Jedis> getJedisPool() {return jedisPool;}public void init() {}/* * string */public boolean exists(String key) {Jedis jedis = null;try {jedis = jedisPool.getResource();boolean result = false;if (jedis.exists(key)) {result = true;}jedisPool.returnResource(jedis);return result;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public void expire(String key, int seconds) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.expire(key, seconds);jedisPool.returnResource(jedis);} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public void expire(byte[] key, int seconds) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.expire(key, seconds);jedisPool.returnResource(jedis);} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public byte[] get(byte[] key) {Jedis jedis = null;try {jedis = jedisPool.getResource();byte[] result = jedis.get(key);jedisPool.returnResource(jedis);return result;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public String get(String key) {Jedis jedis = null;try {jedis = jedisPool.getResource();String result = jedis.get(key);jedisPool.returnResource(jedis);return result;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public byte[] dump(String key) {Jedis jedis = null;try {jedis = jedisPool.getResource();byte[] result = jedis.dump(key);jedisPool.returnResource(jedis);return result;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public String restore(String key, int ttl, byte[] dump) {Jedis jedis = null;try {jedis = jedisPool.getResource();String result = jedis.restore(key, ttl, dump);jedisPool.returnResource(jedis);return result;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public void set(byte[] key, byte[] data) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.set(key, data);jedisPool.returnResource(jedis);} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public void set(String key, String data) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.set(key, data);jedisPool.returnResource(jedis);} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public void del(String key) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.del(key);jedisPool.returnResource(jedis);} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public void del(byte[] key) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.del(key);jedisPool.returnResource(jedis);} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}/* * set */public Long sadd(String key, String... members) {Jedis jedis = null;try {jedis = jedisPool.getResource();Long result = jedis.sadd(key, members);jedisPool.returnResource(jedis);return result;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public Long srem(String key, String... members) {Jedis jedis = null;try {jedis = jedisPool.getResource();Long result = jedis.srem(key, members);jedisPool.returnResource(jedis);return result;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public Set<String> smembers(String key) {Jedis jedis = null;try {jedis = jedisPool.getResource();Set<String> set = jedis.smembers(key);jedisPool.returnResource(jedis);return set;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public String spop(String key) {Jedis jedis = null;try {jedis = jedisPool.getResource();String res = jedis.spop(key);jedisPool.returnResource(jedis);return res;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public Boolean sismember(String key, String member) {Jedis jedis = null;try {jedis = jedisPool.getResource();Boolean res = jedis.sismember(key, member);jedisPool.returnResource(jedis);return res;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}/* * orderd set */public Set<String> zrange(String key, long start, long end) {Jedis jedis = null;try {jedis = jedisPool.getResource();Set<String> set = jedis.zrange(key, start, end);jedisPool.returnResource(jedis);return set;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public void zadd(String key, double score, String member) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.zadd(key, score, member);jedisPool.returnResource(jedis);} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public Set<Tuple> zrangeWithScores(String key, long start, long end) {Jedis jedis = null;try {jedis = jedisPool.getResource();Set<Tuple> result = jedis.zrangeWithScores(key, start, end);jedisPool.returnResource(jedis);return result;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public Long zcard(String key) {Jedis jedis = null;try {jedis = jedisPool.getResource();Long count = jedis.zcard(key);jedisPool.returnResource(jedis);return count;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public Long zcount(String key, double min, double max) {Jedis jedis = null;try {jedis = jedisPool.getResource();Long count = jedis.zcount(key, min, max);jedisPool.returnResource(jedis);return count;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public Long zrem(String key, String... members) {try (Jedis jedis = jedisPool.getResource()) {return jedis.zrem(key, members);}}public Long zrank(String key, String member) {try (Jedis jedis = jedisPool.getResource()) {return jedis.zrank(key, member);}}public Double zscore(String key, String member) {try (Jedis jedis = jedisPool.getResource()) {return jedis.zscore(key, member);}}public Long zremrangeByScore(String key, double start, double end) {try (Jedis jedis = jedisPool.getResource()) {return jedis.zremrangeByScore(key, start, end);}}/* * list */public byte[] rpop(byte[] key) {try (Jedis jedis = jedisPool.getResource()) {return jedis.rpop(key);}}public String rpop(String key) {try (Jedis jedis = jedisPool.getResource()) {return jedis.rpop(key);}}public String rpoplpush(String srckey, String dstkey) {try (Jedis jedis = jedisPool.getResource()) {return jedis.rpoplpush(srckey, dstkey);}}public byte[] rpoplpush(byte[] srckey, byte[] dstkey) {try (Jedis jedis = jedisPool.getResource()) {return jedis.rpoplpush(srckey, dstkey);}}public String lindex(String key, long index) {try (Jedis jedis = jedisPool.getResource()) {return jedis.lindex(key, index);}}public byte[] lindex(byte[] key, long index) {try (Jedis jedis = jedisPool.getResource()) {return jedis.lindex(key, index);}}public Long llen(String key) {try (Jedis jedis = jedisPool.getResource()) {return jedis.llen(key);}}public List<String> lrange(String key, long start, long end) {try (Jedis jedis = jedisPool.getResource()) {return jedis.lrange(key, start, end);}}public String ltrim(String key, long start, long end) {try (Jedis jedis = jedisPool.getResource()) {return jedis.ltrim(key, start, end);}}public Long lpush(String key, String... strings) {try (Jedis jedis = jedisPool.getResource()) {return jedis.lpush(key, strings);}}public Long lpush(byte[] key, byte[]... strings) {try (Jedis jedis = jedisPool.getResource()) {return jedis.lpush(key, strings);}}/* * hash */public Long hincrBy(String key, String field, long value) {try (Jedis jedis = jedisPool.getResource()) {return jedis.hincrBy(key, field, value);}}public boolean hexists(String key, String field) {try (Jedis jedis = jedisPool.getResource()) {return jedis.hexists(key, field);}}public Long hdel(String key, String... fields) {try (Jedis jedis = jedisPool.getResource()) {return jedis.hdel(key, fields);}}public Long hdel(byte[] key, byte[]... fields) {try (Jedis jedis = jedisPool.getResource()) {return jedis.hdel(key, fields);}}public Long hlen(String key) {try (Jedis jedis = jedisPool.getResource()) {return jedis.hlen(key);}}public String hget(String key, String field) {Jedis jedis = null;try {jedis = jedisPool.getResource();String value = jedis.hget(key, field);jedisPool.returnResource(jedis);return value;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public byte[] hget(byte[] key, byte[] field) {Jedis jedis = null;try {jedis = jedisPool.getResource();byte[] value = jedis.hget(key, field);jedisPool.returnResource(jedis);return value;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public byte[] hgetCompress(byte[] key, byte[] field) {try (Jedis jedis = jedisPool.getResource()) {return jedis.hget(key, field);}}public List<String> hmget(String key, String... fields) {Jedis jedis = null;try {jedis = jedisPool.getResource();List<String> set = jedis.hmget(key, fields);jedisPool.returnResource(jedis);return set;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public List<byte[]> hmget(byte[] key, byte[]... fields) {Jedis jedis = null;try {jedis = jedisPool.getResource();List<byte[]> set = jedis.hmget(key, fields);jedisPool.returnResource(jedis);return set;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public List<byte[]> hmgetCompress(byte[] key, byte[]... fields) {try (Jedis jedis = jedisPool.getResource()) {return jedis.hmget(key, fields);}}public void hset(String key, String field, String value) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.hset(key, field, value);jedisPool.returnResource(jedis);} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public void hset(byte[] key, byte[] field, byte[] value) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.hset(key, field, value);jedisPool.returnResource(jedis);} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public void hmset(String key, Map<String, String> hash) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.hmset(key, hash);jedisPool.returnResource(jedis);} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public void hmset(Map<String, Map<String, String>> hashs) {Jedis jedis = null;try {jedis = jedisPool.getResource();Pipeline pipeline = jedis.pipelined();for (String key : hashs.keySet()) {Map<String, String> hash = hashs.get(key);if (hash == null || hash.isEmpty()) {continue;}pipeline.hmset(key, hash);}pipeline.sync();jedisPool.returnResource(jedis);} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public void hmset(byte[] key, Map<byte[], byte[]> hash) {Jedis jedis = null;try {jedis = jedisPool.getResource();jedis.hmset(key, hash);jedisPool.returnResource(jedis);} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public void hmsetBytes(Map<byte[], Map<byte[], byte[]>> hashs) {Jedis jedis = null;try {jedis = jedisPool.getResource();Pipeline pipeline = jedis.pipelined();for (byte[] key : hashs.keySet()) {Map<byte[], byte[]> hash = hashs.get(key);if (hash == null || hash.isEmpty()) {continue;}pipeline.hmset(key, hash);}pipeline.sync();jedisPool.returnResource(jedis);} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public Map<String, String> hgetAll(String key) {Jedis jedis = null;try {jedis = jedisPool.getResource();Map<String, String> result = jedis.hgetAll(key);jedisPool.returnResource(jedis);return result;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public Set<String> hkeys(String key) {Jedis jedis = null;try {jedis = jedisPool.getResource();Set<String> result = jedis.hkeys(key);jedisPool.returnResource(jedis);return result;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}public Map<byte[], byte[]> hgetAll(byte[] redisKey) {Jedis jedis = null;try {jedis = jedisPool.getResource();Map<byte[], byte[]> result = jedis.hgetAll(redisKey);jedisPool.returnResource(jedis);return result;} catch (JedisException e) {jedisPool.returnBrokenResource(jedis);throw e;}}}

对于对象序列化,使用java自定类SerializeUtil.java

package com.eastcom.first.spark.data.redis;import java.io.ByteArrayInputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.Collection;import java.util.Map;import org.apache.commons.io.output.ByteArrayOutputStream;public class SerializeUtil {/** * 判断对象或对象数组中每一个对象是否为空: 对象为null,字符序列长度为0,集合类、Map为empty *  * @param obj * @return */public static boolean isNullOrEmpty(Object obj) {if (obj == null)return true;if (obj instanceof CharSequence)return ((CharSequence) obj).length() == 0;if (obj instanceof Collection)return ((Collection) obj).isEmpty();if (obj instanceof Map)return ((Map) obj).isEmpty();if (obj instanceof Object[]) {Object[] object = (Object[]) obj;if (object.length == 0) {return true;}boolean empty = true;for (int i = 0; i < object.length; i++) {if (!isNullOrEmpty(object[i])) {empty = false;break;}}return empty;}return false;}/** * 对象转字节数组 *  * @param object * @return */public static byte[] serialize(Object object) {ObjectOutputStream oos = null;ByteArrayOutputStream baos = null;try {// 序列化baos = new ByteArrayOutputStream();oos = new ObjectOutputStream(baos);oos.writeObject(object);byte[] bytes = baos.toByteArray();return bytes;} catch (Exception e) {}return null;}/** * 字节数组转对象 *  * @param bytes * @return */public static Object unserialize(byte[] bytes) {ByteArrayInputStream bais = null;try {// 反序列化bais = new ByteArrayInputStream(bytes);ObjectInputStream ois = new ObjectInputStream(bais);return ois.readObject();} catch (Exception e) {}return null;}}



over








原创粉丝点击