Redis基礎學習(六):JAVA操作Redis之Jedis
阿新 • • 發佈:2021-01-28
技術標籤:# Redis
Jedis
1、概述
Jedis是Redis官方推薦的Java連線開發工具。要在Java開發中使用好Redis中介軟體,必須對Jedis熟悉才能寫成漂亮的程式碼
2、基本使用
1、pom依賴
<!-- 阿里JSON解析器 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
< version>1.2.58</version>
</dependency>
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.5 .1</version>
</dependency>
2、簡單測試
測試連線、傳送指令,查詢指令。
package com.jedis;
import redis.clients.jedis.Jedis;
public class JedisDemo {
public static void main(String[] args) {
//建立物件
Jedis jedis = new Jedis("localhost",6379);
//測試連線
System.out. println(jedis.ping());
//測試set
jedis.set("tsetkey","testvalue");
System.out.println(jedis.get("tsetkey"));
}
}
執行結果:
3、事務
1、正常執行
package com.jedis;
import com.alibaba.fastjson.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;
public class JedisTransactionDemo {
public static void main(String[] args) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("hello", "world");
jsonObject.put("你好", "世界");
//建立物件
Jedis jedis = new Jedis("localhost", 6379);
//測試連線
System.out.println(jedis.ping());
//清除原來的資料
jedis.flushDB();
//開啟事務
Transaction transaction = jedis.multi();
try {
transaction.set("data1", jsonObject.toJSONString());
transaction.set("data2", jsonObject.toJSONString());
//執行事務
transaction.exec();
} catch (Exception e) {
//放棄事務
transaction.discard();
e.printStackTrace();
} finally {
System.out.println(jedis.keys("*"));
System.out.println(jedis.get("data1"));
System.out.println(jedis.get("data2"));
//關閉連線
jedis.close();
}
}
}
執行結果
2、JAVA執行時異常
package com.jedis;
import com.alibaba.fastjson.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;
public class JedisTransactionDemo {
public static void main(String[] args) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("hello", "world");
jsonObject.put("你好", "世界");
//建立物件
Jedis jedis = new Jedis("localhost", 6379);
//測試連線
System.out.println(jedis.ping());
//清除原來的資料
jedis.flushDB();
//開啟事務
Transaction transaction = jedis.multi();
try {
transaction.set("data1", jsonObject.toJSONString());
transaction.set("data2", jsonObject.toJSONString());
//新增JAVA執行時異常
int i=1/0;
//執行事務
transaction.exec();
} catch (Exception e) {
//放棄事務
transaction.discard();
e.printStackTrace();
} finally {
System.out.println(jedis.keys("*"));
System.out.println(jedis.get("data1"));
System.out.println(jedis.get("data2"));
//關閉連線
jedis.close();
}
}
}
4、Jedis連線池
package com.jedis;
import com.alibaba.fastjson.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Transaction;
/**
* Date: 2021/1/26 11:01
* FileName: JedisPoolDemo
* Description: Jedis連線池
*/
public class JedisPoolDemo {
public static void main(String[] args) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("hello", "world");
jsonObject.put("你好", "世界");
//1.配置連線池引數
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
//在空閒時檢查有效性, 預設為true
// setTestWhileIdle(true);
表示一個物件至少停留在idle狀態的最短時間,然後才能被idle object evitor掃描並驅逐;
// 這一項只有在timeBetweenEvictionRunsMillis大於0時才有意義
// setMinEvictableIdleTimeMillis(60000);逐出連線的最小空閒時間 預設60000毫秒(10分鐘)
//兩次掃描的時間間隔(毫秒) 如果為負數,則不執行逐出執行緒, 預設10分鐘
// setTimeBetweenEvictionRunsMillis(30000);
//表示每次掃描最多的物件數,-1為全部
// setNumTestsPerEvictionRun(-1);
//2.建立連線池物件
JedisPool jedisPool = new JedisPool(jedisPoolConfig, "localhost", 6379);
//3建立物件
Jedis jedis = null;
//開啟事務
try {
Transaction transaction = null;
try {
//4從連線池獲取物件
jedis = jedisPool.getResource();
//5清除原來的資料
jedis.flushDB();
transaction = jedis.multi();
transaction.set("data1", jsonObject.toJSONString());
transaction.set("data2", jsonObject.toJSONString());
//執行事務
transaction.exec();
} catch (Exception e) {
transaction.discard();
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println(jedis.keys("*"));
System.out.println(jedis.get("data1"));
System.out.println(jedis.get("data2"));
//關閉連線
if (jedis != null) {
jedis.close();
}
//虛擬機器關閉時,釋放pool資源
if (jedisPool != null) {
jedisPool.close();
}
}
}
}
執行完有一個日誌上的報錯,之後再看哪裡有問題。