说明: 1. 演示Redis连接池JedisPool 连接池
2. 笔者代码中的注释有各种实用说明(当然你觉得注释碍眼可以直接删除):
(a).遇到异常及解决方案
(b).一些使用说明
©.知识点对比与类比
3. 此项目演示需要jedis.jar和commons-pool2.jar
=代码如下======
package com.it.util;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* Redis连接池JedisPool简单使用
*
* 1.每次都要去连接Jedis是不是很浪费连接资源
* 类比jdbc通常会使用jdbc连接池cp30或dbcp
* 同样的不能经常性的连接/断开连接Redis服务器,这样的网络开销是很大的。
* 所以,也使用一个池子来管理jedis连接,这个池子就是JedisPool
*
* 2.JedisPool是线程安全的,可以创建可靠的Jedis实例。
* 你凭什么说JedisPool是线程安全的?因为它是一个无状态对象
*
* 3.创建JedisPool
*
* @author 拈花为何不一笑
*
* 说明:此项目演示需要jedis.jar和commons-pool2.jar
*
*/
public class JedisPoolApp {
private JedisPool jedisPool;
//初始化JedisPool连接池
public void init(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(10);//设置最大连接数
jedisPool = new JedisPool(jedisPoolConfig, "localhost",6379,5000,"foo666k");
}
//从JedisPool中获取一个Jedis实例
public Jedis getJedis(){
return jedisPool.getResource();
}
//释放Jedis
public void freeJedis(Jedis jedis){
if(null != jedis){
//jedisPool.returnResource(jedis);此方法为早期版本方法,已过时或废弃
jedisPool.close();
}
}
/**
* 单元测试
* @param args
*/
public static void main(String[] args) {
JedisPoolApp jApp = new JedisPoolApp();
//初始化jedis连接池
jApp.init();
//从连接池中获取一个Jedis实例
Jedis jedis = jApp.getJedis();
jedis.select(1);//选择Redis数据库1,后面的相关的操作数据就存放在数据库1中
//业务操作
//遇到异常:JedisDataException, MISCONF Redis is configured to save RDB snapshots
//but is currently not able to persist on disk...
//解决方案:stop-writes-on-bgsave-error no(redis.windows.conf配置文件中把yes设置成no,并且重启Redis服务器)
jedis.set("str-key","i am redis database1");
System.out.println(jedis.get("str-key"));
//释放jedis连接
jApp.freeJedis(jedis);
}
}