【Redis緩存】- Java客戶端Jedis

目錄

一、概述

二、Jedis 操作 Redis 中的數據結構

1、字符串類型 string

2、哈希類型 hash

3、列表類型 list

4、集合類型 set

5、有序集合類型 sortedset

三、Jedis 連接池 JedisPool

1、JedisPool 的使用

2、JedisPool 連接池工具


一、概述

Java 客戶端 Jedis 是一款 java 操作 Redis 數據庫的工具,類似於 JDBC,也就是通過 Java 代碼來操作數據庫。使用步驟如下:

  1. 導入 jar 包:commons-pool2-2.3.jar、jedis-2.7.0.jar
    1. 獲取jar包鏈接:https://pan.baidu.com/s/1ONkaNFEy6uocm7Aghe80rg   提取碼:plgt
  2. 使用:
    1. 獲取連接
    2. 操作數據
    3. 關閉連接

接下來就以 Redis 的五種數據結構來說明 Jedis 的基本使用

二、Jedis 操作 Redis 中的數據結構

1、字符串類型 string

  1. 獲取連接:Jedis jedis = new Jedis("localhost",6379);
  2. 操作數據:
    1. jedis.set("name","oneStar");       //存儲
    2. jedis.get("name");       //獲取
    3. jedis.setex("name",20,"twoStar");      //將 name:twoStar 鍵值對存入redis,並且20秒後自動刪除該鍵值對
  3. 關閉連接:jedis.close();

注:可以使用 setex() 方法存儲可以指定過期時間的 key value

@Test
public void testString(){
    //1.獲取連接
    Jedis jedis = new Jedis("localhost",6379);

    //2.操作數據
    jedis.set("name","oneStar");    //存儲
    String name = jedis.get("name");      //獲取
    System.out.println(name);

    //可以使用setex()方法存儲可以指定過期時間的 key value
    jedis.setex("name",20,"twoStar");

    //3.關閉連接
    jedis.close();
}

2、哈希類型 hash

  1. 獲取連接:Jedis jedis = new Jedis();       //如果使用空參構造,默認值 "localhost",6379端口
  2. 操作數據:
    1. jedis.hset("user","name","oneStar");     //存儲
    2. jedis.hget("user","name");      //獲取
    3. Map<String, String> user = jedis.hgetAll("user");     // 獲取hash的所有map中的數據
  3. 關閉連接:jedis.close();
@Test
public void testHash(){
    //1.獲取連接
    Jedis jedis = new Jedis();//如果使用空參構造,默認值 "localhost",6379端口
    //2.操作數據
    jedis.hset("user","name","oneStar");    //存儲
    jedis.hset("user","age","18");
    jedis.hset("user","email","[email protected]");
    String name = jedis.hget("user","name");    //獲取
    String age = jedis.hget("user","age");
    String email = jedis.hget("user","email");
    System.out.println(name + age + email);

    // 獲取hash的所有map中的數據
    Map<String, String> user = jedis.hgetAll("user");
    // keyset
    Set<String> keySet = user.keySet();
    for (String key : keySet) {
        //獲取value
        String value = user.get(key);
        System.out.println(key + ":" + value);
    }
    //3.關閉連接
    jedis.close();
}

3、列表類型 list

  1. 獲取連接:Jedis jedis = new Jedis();       //如果使用空參構造,默認值 "localhost",6379端口
  2. 操作數據:
    1. jedis.lpush("mylist","a","b","c");        //從左邊存
    2. jedis.rpush("mylist","a","b","c");        //從右邊存
    3. jedis.lrange("mylist", 0, -1);        //範圍獲取
    4. jedis.lpop("mylist");        //從左邊彈出
    5. jedis.rpop("mylist");       //從右邊彈出
  3. 關閉連接:jedis.close();
@Test
public void testList(){
    //1.獲取連接
    Jedis jedis = new Jedis();  //如果使用空參構造,默認值 "localhost",6379端口

    //2.操作數據
    //存儲
    jedis.lpush("mylist","a","b","c");//從左邊存
    jedis.rpush("mylist","a","b","c");//從右邊存

    // list 範圍獲取
    List<String> mylist = jedis.lrange("mylist", 0, -1);
    System.out.println(mylist);

    // list 彈出(刪除)
    String element1 = jedis.lpop("mylist");     //彈出左邊的c
    System.out.println(element1);
    String element2 = jedis.rpop("mylist");     //彈出右邊的c
    System.out.println(element2);

    // list 範圍獲取
    List<String> mylist2 = jedis.lrange("mylist", 0, -1);
    System.out.println(mylist2);

    //3.關閉連接
    jedis.close();
}

4、集合類型 set

  1. 獲取連接:Jedis jedis = new Jedis();       //如果使用空參構造,默認值 "localhost",6379端口
  2. 操作數據:
    1. sadd("myset","a","b","c");       //存儲
    2. jedis.smembers("myset");      //獲取
  3. 關閉連接:jedis.close();
@Test
public void testSet(){
    //1.獲取連接
    Jedis jedis = new Jedis();  //如果使用空參構造,默認值 "localhost",6379端口

    //2.操作數據
    // set 存儲
    jedis.sadd("myset","a","b","c");
    // set 獲取
    Set<String> myset = jedis.smembers("myset");
    System.out.println(myset);

    //3. 關閉連接
    jedis.close();
}

5、有序集合類型 sortedset

  1. 獲取連接:Jedis jedis = new Jedis();       //如果使用空參構造,默認值 "localhost",6379端口
  2. 操作數據:
    1. jedis.zadd("mysortedset",18,"oneStar");       //存儲
    2. jedis.zrange("mysortedset", 0, -1);       //獲取
  3. 關閉連接:jedis.close();
@Test
public void testSortedset(){
    //1.獲取連接
    Jedis jedis = new Jedis();  //如果使用空參構造,默認值 "localhost",6379端口

    //2.操作數據
    // Sortedset 存儲
    jedis.zadd("mysortedset",18,"oneStar");
    jedis.zadd("mysortedset",16,"twoStar");
    jedis.zadd("mysortedset",55,"threeStar");

    // Sortedset 獲取
    Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);
    System.out.println(mysortedset);

    //3. 關閉連接
    jedis.close();
}

三、Jedis 連接池 JedisPool

JedisPool 連接池和 JDBC 連接池是類似的,在實際開發中,“獲得連接”和“釋放資源”是非常消耗系統資源的兩個過程,爲了解決此類性能問題,通常會採用連接池技術,來共享連接,這樣既不用每次都獲取連接、釋放連接了。和 JDBC 不同的是 JDBC 使用的是第三方提供的接口,而 jedis 則是自帶了連接池,叫 JedisPool

1、JedisPool 的使用

  1. 創建 JedisPool 連接池對象
    1. 創建配置對象:new JedisPoolConfig();
    2. 創建Jedis連接池對象:new JedisPool(config,"localhost",6379);
  2. 調用方法 getResource()方法獲取Jedis連接
    1. 獲取連接:jedisPool.getResource();
  3. 使用:jedis.set("name","oneStar");
@Test
public void testJedisPool(){
    //1.創建一個配置對象
    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    jedisPoolConfig.setMaxTotal(50);    //最大連接數
    jedisPoolConfig.setMaxIdle(10);     //最大空閒連接

    //2.創建jedis連接對象
    JedisPool jedisPool = new JedisPool(jedisPoolConfig,"localhost",6379);

    //3.獲取連接
    Jedis jedis = jedisPool.getResource();

    //4.使用
    jedis.set("name","oneStar");    //存儲
    String name = jedis.get("name");    //獲取
    System.out.println(name);

    //5.關閉連接(歸還連接池)
    jedis.close();
}

2、JedisPool 連接池工具

在 JedisPool 的使用中,會進行相應的配置,而配置不方便修改,增加了代碼的耦合度,爲了降低耦合度,可以將一些配置抽取到配置文件裏面,要修改配置的時候直接修改配置文件即可,不需要修改代碼。

【1】首先先要在 src 目錄下創建配置文件並寫入相關配置:jedis.properties

host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10

【2】編寫Jedis工具類

  1. 靜態代碼塊加載配置文件,配置連接池的參數
  2. 提供獲取連接的方法
package cn.star;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
 * 〈一句話功能簡述〉<br> 
 * 〈Jedis工具類〉
 *
 * @author OneStar
 * @create 2019/11/26
 * @since 1.0.0
 */
public class JedisPoolUtil {
    private static JedisPool jedisPool;

    static {
        //讀取配置文件
        InputStream is = JedisPoolUtil.class.getClassLoader().getResourceAsStream("jedis.properties");
        //創建Properties對象
        Properties pro = new Properties();
        //關聯文件
        try {
            pro.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //獲取數據,設置到JedisPoolConfig中
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
        config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));

        //初始化JedisPool
        jedisPool = new JedisPool(config, pro.getProperty("host"), Integer.parseInt(pro.getProperty("port")));
    }

    //獲取連接方法
    public static Jedis getJedisPool(){
        return jedisPool.getResource();
    }
}

【3】編寫測試類

@Test
public void testJedisPoolUtil(){
    //1.通過連接池工具獲取
    Jedis jedis = JedisPoolUtil.getJedisPool();

    //2.使用
    jedis.set("name","LSTAR");    //存儲
    String name = jedis.get("name");    //獲取
    System.out.println(name);

    //3.關閉連接(歸還連接池)
    jedis.close();
}

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章