1. 程式人生 > 其它 >Redis基礎學習(六):JAVA操作Redis之Jedis

Redis基礎學習(六):JAVA操作Redis之Jedis

技術標籤:# 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();
            }
        }
    }
}

在這裡插入圖片描述
執行完有一個日誌上的報錯,之後再看哪裡有問題。