1. 程式人生 > 其它 >Java通過Jedis與Redis整合與事務控制 !

Java通過Jedis與Redis整合與事務控制 !

技術標籤:Redisredisjava

Jedis

  1. 什麼是jedis?

Redis官方網站上列一些Java的客戶端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推薦使用Jedis和Redisson。相當於Java操作Redis的中介軟體。在企業中用的最多的就是Jedis。Jedis提供了完整Redis命令,而Redisson有更多分散式的容器實現

  1. 匯入依賴
<!-- https://mvnrepository.com/artifact/redis.clients/jedis --> 
<dependency> 
<groupId>
redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> </dependency>
  1. 單例連線測試
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()); }

輸出:
在這裡插入圖片描述

  1. 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(); } } }
  1. 測試連線池
 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);
    }

在這裡插入圖片描述

  1. 事務
 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();// 關閉連線
        }

    }