【Redis】- 客户端 Jedis

Redis 经常使用客户端: Redission、Jedisjava

jedis 简介

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);
    }
}
相关文章
相关标签/搜索