Jedis对于Redis的使用(一)

时间:2021-09-16 17:29:59

首先创建一个RedisConfig类,用来操作redis的各种参数

public class RedisConfig {
    //可用连接实例的最大数目,默认值为8;
    //如果复制为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)
    public static int MAX_ACTIVE = 1024;
    //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也为8.
    public static int MAX_IDLE = 200;
    //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出
    //JedisConnectionException;
    public static int MAX_WAIT = 10000;
    
    public static int TIMEOUT = 10000;
    
    public static int RETRY_NUM = 5;
}


然后写一个工具类做对Jedis的简单封装:

public class JedisUtil {
    private Logger logger = Logger.getLogger(this.getClass().getName());
    
    private JedisUtil(){
        
    }
    
    private static class RedisUtilHolder{
        private static final JedisUtil instance = new JedisUtil();
    }
    
    public static JedisUtil getInstance() {
        return RedisUtilHolder.instance;
    }
    
    private static Map<String,JedisPool> maps = new HashMap<String, JedisPool>();
    
    private static JedisPool getPool(String ip, int port) {
        String key = ip + ":" + port;
        JedisPool pool = null;
        if(!maps.containsKey(key)) {
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxActive(RedisConfig.MAX_ACTIVE);
            config.setMaxIdle(RedisConfig.MAX_IDLE);
            config.setMaxWait(RedisConfig.MAX_WAIT);
            config.setTestOnBorrow(true);
            config.setTestOnReturn(true);
            
            pool = new JedisPool(config,ip,port,RedisConfig.TIMEOUT);
            maps.put(key, pool);
        } else {
            pool = maps.get(key);
        }
        return pool;
    }
    
    public Jedis getJedis(String ip, int port) {
        Jedis jedis = null;
        int count = 0;
        do{
            try{
                jedis = getPool(ip,port).getResource();
            } catch(Exception e) {
                logger.error("get redis Master1 failed", e);
                getPool(ip,port).returnBrokenResource(jedis);
            }
        } while (jedis == null && count<RedisConfig.RETRY_NUM);
        return jedis;
    }
    
    public static void main(String[] args) {
        JedisUtil ju = new JedisUtil();
        Jedis jedis = ju.getJedis("0", 0);
        jedis.set("fdf", "fdf");
    }
}


这个方法中可以通过JedisPool获取到Jedis资源,完成这些后就可以用一个测试类进行测试了。方法:

jedis.flushDB():清空数据

jedis.exists("key"):

jedis.set("key","key");

jedis.exist("key");

Set<String> keys = jedis.keys("*");系统中所有的键

jedis.del("key");

jedis.expire("key",5):设置某个键的过期时间为5s

jedis.ttl("key"):查看某个键的声誉生存时间

jedis.persist("key"):移除某个键的生存时间

jedis.type("key"):查看某个键所存值的类型