Redis 经常使用客户端: Redission、Jedisjava
redis的Java客户端,可访问、操做Redisredis
Jedis工具类:工具
package com.zhiwei.redis_jedis; import java.util.ResourceBundle; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; /** * Redis的基础工具类 * @author Yang Zhiwei * */ public final class RedisUtil { private static JedisPool jedisPool = null; //初始化JedisPool链接池 static { try { //从classpath路径下获取redis.perpoties文件,获取jedis链接池参数(后缀名能够省略) ResourceBundle rb=ResourceBundle.getBundle("com/zhiwei/redis_jedis/redis"); int maxActive=Integer.parseInt(rb.getString("redis.pool.maxActive")); int maxIdle=Integer.parseInt(rb.getString("redis.pool.maxIdle")); int minIdle=Integer.parseInt(rb.getString("redis.pool.minIdle")); int maxWait=Integer.parseInt(rb.getString("redis.pool.maxWait")); //下面亮相两项配置会影响性能(通常在测试环境中使用) boolean testOnBorrow=Boolean.parseBoolean(rb.getString("redis.pool.testOnBorrow")); boolean testOnReturn=Boolean.parseBoolean(rb.getString("redis.pool.testOnReturn")); String host=rb.getString("redis.ip"); int port=Integer.parseInt(rb.getString("redis.port")); //封装jedis链接池参数 JedisPoolConfig jedisPoolConfig=new JedisPoolConfig(); jedisPoolConfig.setMaxActive(maxActive); jedisPoolConfig.setMaxIdle(maxIdle); jedisPoolConfig.setMinIdle(minIdle); jedisPoolConfig.setMaxWait(maxWait); jedisPoolConfig.setTestOnBorrow(testOnBorrow); jedisPoolConfig.setTestOnReturn(testOnReturn); //建立redis链接池 jedisPool=new JedisPool(jedisPoolConfig,host,port); } catch (Exception e) { e.printStackTrace(); } } /** * 经过Jedis链接池获取Jedis:原子性 * @return */ public synchronized static Jedis getJedis() { try { if (jedisPool != null) { Jedis resource = jedisPool.getResource(); return resource; } else { return null; } } catch (Exception e) { e.printStackTrace(); return null; } } /** * jedis链接返回给链接池,释放资源 * @param jedis */ public static void releaseJedis(final Jedis jedis) { if (jedis != null) { jedisPool.returnResource(jedis); } } /** * 根据key值去查找value值 * @param key * @return */ public static String find(String key){ Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.get(key); } catch (Exception e) { e.printStackTrace(); return null; }finally{ RedisUtil.releaseJedis(jedis); //释放Jedis链接 } } /** * 获取key对应的value值的子串: * set key "this is example!" * getrange key 0 3 * --->"this" */ public static String findSubStr(String key,Integer startOffset,Integer endOffset){ Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.getrange(key, startOffset, endOffset); } catch (Exception e) { e.printStackTrace(); return null; }finally{ jedisPool.returnResource(jedis); } } /** * redis添加k-v对:finally中代码块经过try--catch以后必定会触发 * @param key * @param value * @return * @throws Exception */ public static boolean add(String key,String value) throws Exception{ Jedis jedis = null; try { jedis = jedisPool.getResource(); jedis.set(key, value); return true; } catch (Exception e) { e.printStackTrace(); return false; }finally{ RedisUtil.releaseJedis(jedis); } } /** * 删除redis中的key对应的k-v对 * @param key * @return */ public static boolean del(String key){ Jedis jedis = null; try { jedis = jedisPool.getResource(); jedis.del(key); return true; } catch (Exception e) { e.printStackTrace(); return false; }finally{ RedisUtil.releaseJedis(jedis); } } }
Redis 配置性能
redis.pool.maxActive=200 #最大链接数:可以同时创建的“最大连接个数” redis.pool.maxIdle=100 #最大空闲数:空闲连接数大于maxIdle将进行回收 redis.pool.minIdle=5 #最小空闲数:低于minIdle时,将建立新的连接 redis.pool.maxWait=100 #最大等待时间:单位ms redis.pool.testOnBorrow=true #使用链接时,检测链接是否成功 redis.pool.testOnReturn=true #返回链接时,检测链接是否成功 redis.ip=127.0.0.1 redis.port=6379
基础测试类:测试
package com.zhiwei.redis_jedis; /* *jedis是java访问redis的一个客户端,相似FTPClient HttpClient */ import redis.clients.jedis.Jedis; public class MainTest { public static void main(String[] args) throws Exception { if(RedisUtil.add("squirrel", "xiaoyang")){ System.err.println("key:squirrel,value:"+RedisUtil.find("squirrel")); } } //常规链接:类比FTPClient @SuppressWarnings("unused") private static void basic() { Jedis jedis = new Jedis("127.0.0.1"); //创建jedis与redis链接 System.out.println("Connection to server sucessfully"); System.out.println("Server is running: "+jedis.ping()); jedis.set("name", "xiaoyang"); //添加k-v对 System.out.println(jedis.get("name")); //获取key为name的元素的值 jedis.del("name"); //删除Key为name的元素 System.out.println(jedis.get("name")); jedis.flushDB(); //清空当前访问DB的数据 } /** * 基础测试类:通常开发 */ private static void poolJedis(){ //获取Redis的客户端Jedis:通常开发使用Redis进行集群开发,jedis链接经过链接池获取 Jedis jedis=RedisUtil.getJedis(); jedis.set("name", "sqirrel"); //redis中添加数据:k-v形式 System.out.println("redis--->"+jedis.get("name"));//取值 String result=RedisUtil.find("name"); System.out.println("result--->"+result); } }