redis连接池
Jedis连接池
jedis是官方首选的java客户端开发包。
jedis常用API
方法 |
解释 |
new Jedis(host, port) |
创建jedis对象,参数host是redis服务器地址,参数port是redis服务端口 |
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同样适用。
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(); }