开发者学堂课程【Redis 入门到精通(基础篇):jedis 工具类制作】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/764/detail/13409
jedis 工具类制作
内容介绍
一、代码
二、Jedis 简易工具类开发
三、封装连接参数
一、代码
package com.itheima.util;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class JedisUtils {
Private static JedisPool jp = null;
private static String host = null;
private static int port;
private static int maxTotal;
private static int maxIdle;
static{
ResourceBundle rb = ResourceBundle.getBundle("redis");
host = rb.getString(key:"redis.host");
port = Integer.parseInt(rb.getString(key:"redis.port"));
maxTotal = Integer.parseInt(rb.getString(key:"redis.maxTotal"));
maxIdle = Integer.parseInt(rb.getString(key:"redis,maxIdle"));
JedisPoolConfig jpc = new JedisPoolConfig();
jpc.setMaxTotal(maxTotal);
jpc.setMaxIdle(maxIdle);
String host = "127.0.0.1";
int port = 6379;
jp = new JedisPool(jpc,host,port);
}
public static Jedis getJedis(){
return jp.getResource();
}
public static void main(String[],args){
Jedisutils.getJedis();
}
}
程序已经完成了,有一个小问题,jedis对象是手动管理的,企业中不会这样做,都是连接池提供连接,现在做一个jedis连接处的获取工具类,创建一个util.jedisUtils,提供一个方法,能够返回jedis对象,这个对象怎么得呢,
通过连接池获取,那么我们把连接池造出来就好了,不需要我们自己去做一个连接池,jedis 已经提供了连接池技术。
二、Jedis简易工具类开发
基于连接池获取连接
JedjsPool:Jedis提供的连接池技术
poolConfig:连接池配置对象
Host:redis服务地址
Port:redis服务端口号public JedisPool(GenericobjectPoolConfig poolconfig,String host, int port){
this(poolConfig,host,port,2000,(String)null, 0, (string)null);
Jedis中有一个叫jedispool的对象,这就是一个连接池对象,拿到这个对象之后,就可以得连接了,方法比较简单,jedispool的配置的构造方法是(GenericobjectPoolConfig poolconfig,String host, int port),先写一个jedis对象,然后写一个null,返回值就是jedis,最后加一个return,
接下来把null的问题解决掉就OK了,只需要new一个jedispool对象即可,然后告诉他刚刚我们说的那些参数,就是jedis的核心配置,有了核心配置就可以了,告诉一个最大连接数,活动连接数,然后加上端口号,最后把三个参数告诉他就可以创建了。
我们试运行一下,然后获取jedisUtils.getjedis(),能获取出来就OK,现在没有报错,已经连上了连接池,如果要真正测试,可以在其他的代码进行测试。
把我们上一节程序的jedis去掉,然后jedis拿法换一下,第18行:Jedis jedis = JedisUtils.getJedis();
这个拿出来,可以正常运行,这个时候jedis的工具类就做成了一个基础版,然后我们思考一下,每次连接都创建一个连接池,这不仅没有提高效率,反而降低了效率,所以我们要把这个抽出来,只加载一次就可以了,静态代码块,在这里做一个初始化,把这一块搬走,调用jp是不行的,在外面定义一下JedisPool,这样就可以了,这样就从外部初始化了。
然后为了避免后续修改程序,把30,10提出了写一个配置文件,new一个file,redis.properties,然后写配置文件的代码,在代码里面加上配置文件,拿到配置文件后,一个一个取值,首先取出host,依次port,maxTotal,maxIdle,接下来就都做完了,下面的地址端口可以删掉了,把两个输字改一下,然后运行一下,没有报错,到上一节的程序运行也没有问题,怎样证明是使用的这个,那么我们就修改一下配置文件就可以了,再次运行报错,无法连接,我们的工具类就做好了。
搬运代码:
JedisPoolConfig jpc = new JedisPoolConfig();
jpc.setMaxTotal(30);
jpc.setMaxIdle(10);
String host = "127.0.0.1";
int port = 6379;
JedisPool jp = new JedisPool(jpc,host,port);
配置文件file代码:
redis.host=127.0.0.1
redis.port=6379
redis.maxTotal=30
redis.maxIdle=10
三、封装连接参数
Jedis.properties
redis.host=127.0.0.1
redis.port=6379
redis.maxTotal=30
redis.maxIdle=10
加载配置信息
静态代码初始化资源
static{
ResourceBundle rb = ResourceBundle.getBundle("redis");
host = rb.getString(key:"redis.host");
port = Integer.parseInt(rb.getString(key:"redis.port"));
maxTotal = Integer.parseInt(rb.getString(key:"redis.maxTotal"));
maxIdle = Integer.parseInt(rb.getString(key:"redis,maxIdle"));
PoolConfig jpc = new JedisPoolConfig();
PoolConfig.setMaxTotal(maxTotal);
PoolConfig.setMaxIdle(maxIdle);
JedisPool = new JedisPool(jpc,host,port);
获取连接
对外访问接口,提供Jedis连接对象,连接从连接池获取
public static Jedis getJedis(){
Jedis jedis = jedisPool.getResource();
return jp.getResource();
}