Java通過Jedis與Redis整合與事務控制 !
阿新 • • 發佈:2020-12-27
Jedis
- 什麼是jedis?
Redis官方網站上列一些Java的客戶端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推薦使用Jedis和Redisson。相當於Java操作Redis的中介軟體。在企業中用的最多的就是Jedis。Jedis提供了完整Redis命令,而Redisson有更多分散式的容器實現
- 匯入依賴
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId> redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
- 單例連線測試
public static void main(String[] args) {
// 1.new Jedis 物件填寫ip和埠號
Jedis jedis = new Jedis("127.0.0.1",6379);
// 如果設定了密碼,需要認證
//jedis.auth("password");
// 2. 測試是否可以ping通
System.out.println(jedis.ping());
}
輸出:
- JedisPool連線池測試
JedisPool網路連線池是一個執行緒安全的,而Jedis單例進行連線是執行緒不安全的,可以在JedisPool連線池中建立Jedis例項,然後從連線池中取Jedis例項進行操作,會解決執行緒不安全的問題提高效率。
public class JedisPoolUtil {
private static JedisPool jedisPool = null;
static {
try {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(200);
config.setTestOnBorrow(true);
config.setMaxWaitMillis(10000);
//jedisPool = new JedisPool(config, "127.0.0.1", 6379, 10000, “password”);
jedisPool = new JedisPool(config, "127.0.0.1", 6379, 10000);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Jedis getJedis() {
if (jedisPool != null) {
Jedis jedis = jedisPool.getResource();
return jedis;
}
return null;
}
public static void close(Jedis jedis) {
if (jedis != null) {
jedis.close();
}
}
}
- 測試連線池
public static void main(String[] args) {
//從連線池中獲取jedis例項
Jedis jedis = JedisPoolUtil.getJedis();
jedis.set("k1", "v1");
// set 多個key 和 value
jedis.mset("k2", "v2", "k3", "v3", "k4", "v4");
System.out.println(jedis.get("k3"));
System.out.println(jedis.keys("*"));
// delete key
jedis.del("k2");
System.out.println(jedis.keys("*"));
JedisPoolUtil.close(jedis);
}
- 事務
public static void main(String[] args) {
Jedis jedis = new Jedis("127.0.0.1",6379);
jedis.flushDB();
JSONObject jsonObject = new JSONObject();
jsonObject.put("hello","world");
jsonObject.put("name","xuqingdeng");
//開啟事務
Transaction multi = jedis.multi();
String result = jsonObject.toJSONString();
// jedis.watch(result); // 監控
try {
multi.set("user1",result);
multi.set("user2",result);
int i = 1/0; //模擬程式碼丟擲異常事務,執行失敗
multi.exec(); // 執行事務
} catch (Exception e) {
multi.discard(); // 放棄事務
e.printStackTrace();
} finally {
System.out.println(jedis.get("user1"));
System.out.println(jedis.get("user2"));
jedis.close();// 關閉連線
}
}