Jedis连接池

 

jedis是官方首选的java客户端开发包。

jedis常用API

方法

new Jedis(host, port)

创建jedis对象,参数hostredis器地址,参数portredis端口

set(key,value)

设置字符串类型的数

get(key)

获得字符串类型的数

hset(key,field,value)

设置哈希类型的数

hget(key,field)

获得哈希类型的数

lpush(key,values)

设置列表类型的数

lpop(key)

列表左面弹栈

rpop(key)

列表右面弹栈

del(key)

删除指定的key

 

结合spring常用方法有一下方法

Jedis jedis = new Jedis();
jedis.set(“test”,“demo1”);

不加参数,默认是localhost,端口号是6379,数据库是db0

所以我们在使用的时候需要制定redis地址和端口号

 

@Value("${spring.redis.host}")
 private String host;

@Value("${spring.redis.port}")
 private String port;

@Value("${spring.redis.database}")
private String db;

 

Jedis jedis = new Jedis(host,Integer.parseInt(port));
jedis.select(Integer.parseInt(db));
jedis.set("test","demo1");

通过上面的代码,可以连接指定的redis和数据库

最后需要通过close方法去关闭连接,否则会发现每次redis client都会增加一个

redis连接池插图

 

通常我们在连接数据库的时候为了方便使用都会使用数据库连接池,redis同样适用。

jedis为我们提供了这一类的技术,jedisPool在创建时初始化一些连接资源存储到连接池中,使用jedis连接资源时不需要创建,而是从连接池中获取一个资源进行redis的操作,使用完毕后,不需要销毁该jedis连接资源,而是将该资源归还给连接池,供其他请求使用。

如此一来,我们可以使用创建工具类来创建一个jedis对象

@Component
public class JedisPoolFactory {

    private static JedisPool jedisPool;

    private static int maxtotal;

    private static int maxwaitmillis;

    private static String host;

    private static int port;

    private static int db;

    private static int maxIdle;

    public int getMaxtotal() {
        return maxtotal;
    }

    @Value("${spring.redis.maxtotal}")
    public void setMaxtotal(int maxtotal) {
        this.maxtotal = maxtotal;
    }

    public int getMaxwaitmillis() {
        return maxwaitmillis;
    }

    @Value("${spring.redis.maxwaitmillis}")
    public void setMaxwaitmillis(int maxwaitmillis) {
        this.maxwaitmillis = maxwaitmillis;
    }

    public String getHost() {
        return host;
    }

    @Value("${spring.redis.host}")
    public void setHost(String host) {
        this.host = host;
    }

    public int getPort() {
        return port;
    }

    @Value("${spring.redis.port}")
    public void setPort(int port) {
        this.port = port;
    }

    public int getDb() {
        return db;
    }

    @Value("${spring.redis.database}")
    public void setDb(int db) {
        this.db = db;
    }

    public int getMaxIdle() {
        return maxIdle;
    }

    @Value("${spring.redis.maxIdle}")
    public void setMaxIdle(int maxIdle) {
        JedisPoolFactory.maxIdle = maxIdle;
    }

    public static JedisPool getInstance() {

        if (jedisPool != null) {
            return jedisPool;
        } else {
            JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
            jedisPoolConfig.setMaxTotal(maxtotal);
            jedisPoolConfig.setMaxIdle(maxIdle);
            jedisPoolConfig.setMaxWaitMillis(maxwaitmillis);
            jedisPool = new JedisPool(jedisPoolConfig, host, port, 3000, null, 10);
            return jedisPool;
        }

    }

}

 

public class JedisUtil {

    private static Jedis jedis = null;

    public static Jedis getJedis() {
        jedis =  JedisPoolFactory.getInstance().getResource();
        return jedis;
    }

    public static void close(){
        if(jedis != null){
            jedis.close();
        }
    }

}

 

@Override
public void demo2() {
    Jedis jedis = JedisUtil.getJedis();
    jedis.set("demo2","demo2");
    JedisUtil.close();

}

 

 

 

发表评论

电子邮件地址不会被公开。