記事ディレクトリ
1. Jedis(JavaクライアントがRedisを操作するためのツールクラス)の概要
Jedisは、Redisが公式に推奨するJava接続開発ツールです。コマンドの使用に加えて、基本的に主流の言語はクライアントサポートを備えています。メインのJavaクライアントはJedisです。Jedisは完全なRedisコマンドを提供しますが、Redissonはより多くの分散コンテナー実装を備えています。
JavaオペレーションRedisツールクラス:Jedis
Jedis接続プールは
、apache-commons pool2に基づくjedis接続プールを使用します。接続プールオブジェクトを構築するときは、プールオブジェクトの構成オブジェクトとJedisPoolConfig(GenericObjectPoolConfigから継承)を提供する必要があります。この構成オブジェクトを使用して、接続プールの関連パラメーター(接続の最大数、空の最大数など)を構成できます。
j 2つのjarパッケージ
1.1 Redis操作へのJedis接続のテスト
public class TestJedis {
@Test
public void test01(){
//1:创建一个Jedis对象 创建一个连接,参1 ip地址(Redis服务器的ip地址) 参2 端口
Jedis jedis = new Jedis("localhost", 6379);
//2:执行Redis的指令(set指令)
//写入数据
jedis.set("name","[email protected]");//添加 string-string
jedis.sadd("set","hello","[email protected]","Welcome to use");//添加string-set集合类型
//读取数据
System.out.println(jedis.get("name"));
System.out.println(jedis.smembers("set"));
//关闭连接
jedis.close();
}
}
演算結果:
[email protected]
[こんにちは、ようこそ、strive_gf @ 163.com]
2. Jedis接続プールの原則(時間のスペースはコレクションに相当)
接続プールの利点:
接続の頻繁な作成と破棄は非常にパフォーマンスを消費するため(TCP / IP 3ウェイハンドシェイクと4つのウェーブは非常にパフォーマンスを消費します)、接続プールは、頻繁なリソースの割り当てと解放によって引き起こされるパフォーマンスの消費の問題を解決します。
メソッド:コレクションを作成して複数の接続を初期化し、必要に応じてgetConnection()メソッドを呼び出して接続を申請し、使用後にclose()を呼び出して接続プールに戻します。(ここでのclose()は、接続を閉じるためではなく、接続プールに戻すためのものです)
2.1 Jedis接続プールの実装(ハードコード)
ハードコードされた
構成パラメーターはJavaコードで記述され、クラスにコンパイルされます。構成を変更するには、将来Javaコードを変更する必要があります
public class TestJedisPool {
@Test
public void test01(){
// 1:创建连接池的配置对象
JedisPoolConfig config = new JedisPoolConfig();
//设置最大链接数
config.setMaxTotal(20);
//设置空闲连接数
config.setMaxIdle(10);
// 2:创建连接池 参1:Redis服务器ip地址 参2:端口号
JedisPool pool = new JedisPool(config, "localhost", 6379);
// 3:从连接池中获取一个连接
Jedis jedis = pool.getResource();//获取一个连接
// 4:执行Redis执行 Map<String,String> set get
jedis.set("name","JedisPool连接池");
String value = jedis.get("name");
System.out.println(value);
// 5:释放连接
jedis.close();
}
}
演算結果:
JedisPool接続プール
2.2 Jedis接続プールの最適化(ツールクラス呼び出しとして記述)
プロジェクトでは、構成ファイルを使用してパラメーターを構成します。将来、Javaコードを変更する必要はありません。ファイル内のパラメーターを直接変更します。
- テストクラス(ビジネスロジック)を書く
//Jedis连接池优化(JedisPool优化)
public class TestJedisUtils {
@Test
public void test01(){
//1:从连接池获取连接
Jedis jedis = JedisUtils.getRedis();
//2: 进行读写操作
jedis.set("name","JedisPool连接池优化JedisUtils");
String value = jedis.get("name");
System.out.println(value);
//3: 关闭连接
JedisUtils.close(jedis);
}
}
- パラメータ変数を保存するプロパティファイルを作成する(jedis.properties)
//プロパティファイルには、キーと値のペアの形式でデータが含まれ、特別な読み取りツールのPropertiesクラスを使用して読み取ることができます。
maxTotal=50
maxIdle=15
url=localhost
port=6379
- jedis接続プールを作成するためのツールクラス(.properties内のファイルを読み取る)
.propertiesファイルを読み取る方法:
- クラスローダーを使用して最初にストリームをロードしてから、Propertiesクラスを使用してを読み取ることができます。
- ResourceBundleを使用して.proptiesを読み取ることもできます
3.1 クラスローダーを使用してストリームにロードし、次にPropertiesクラスを使用して読み取ります
public class JedisUtils {
//单例模式 静态代码块只执行一次,因为创建会很消耗性能
private static JedisPool pool;
//静态代码在项目中,如果被使用只会加载一次
static {
//读src下的文件用类加载器的方式 - 类加载器去加载成流,再使用Properties类来读
InputStream inputStream= JedisUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
//.properties文件专门的读取工具
Properties properties = new Properties();
try {
//将流中的数据读成map
properties.load(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
// 1:创建连接池的配置对象
JedisPoolConfig config = new JedisPoolConfig();
//设置最大链接数
config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
//设置空闲连接数 "3"
config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
//2:创建连接池
pool = new JedisPool(config, properties.getProperty("url"), Integer.parseInt(properties.getProperty("port")));
}
public static Jedis getRedis() {
// 3:从连接池中获取一个连接
Jedis jedis = pool.getResource();//获取一个连接
return jedis;
}
public static void close(Jedis jedis) {
if(jedis!=null){
jedis.close();
}
}
}
3.2 ResourceBundleを使用して.proptiesを読み取る
public class JedisUtils {
private static JedisPool pool = null;
//1:创建一个连接池
static{
//1.1 解析properties文件
ResourceBundle bundle = ResourceBundle.getBundle("jedis");
//获取参数
String maxTotal = bundle.getString("maxTotal");
String maxIdle = bundle.getString("maxIdle");
String url = bundle.getString("url");
String port = bundle.getString("port");
//1.2创建连接池
//1:创建连接池的配置对象
JedisPoolConfig config = new JedisPoolConfig();
//1.1 设置最大连接数
config.setMaxTotal(Integer.parseInt(maxTotal));
//1.2 设置空闲连接数
config.setMaxIdle(Integer.parseInt(maxIdle));
//2:创建连接池
pool = new JedisPool(config, url, Integer.parseInt(port));
}
//2:对外提供一个获取连接的方法
public static Jedis getJedis(){
return pool.getResource();
}
//3:提供释放资源的方法
public static void close(Jedis jedis){
if(jedis != null) {
jedis.close();
}
}
}
演算結果:
JedisPool接続プールの最適化JedisUtils