Jedis連接池(Java操作Redis)

Java客戶端 Jedis

Jedis 是一款Java操作redis數據庫的工具;其使用非常簡單

  • 使用步驟
    1. 下載jedis的jar包
      1.commons-pool2-2.3.jar
      2.jedis-2.7.0.jar
    2. 使用
      使用時只需要將上述兩個jar包導入工程中的WEB-INF下的lib目錄中,即可
      jedis工程目錄結構如圖所示
      jedis工程目錄結構

Jedis的基本使用如下所示:

    // Jedis快速入門
    @Test
    public void test1(){
        // 1.獲取連接
        // Jedis jedis = new Jedis("localhost",6379);
        // 若空參,則默認連接的是本機的6379端口redis服務器
        Jedis jedis = new Jedis();
        // 2.操作
        jedis.set("username","zhangsan ");
        // 3.關閉連接
        jedis.close();
    }

可以發現,jedis的使用與直接操作redis的命令十分相似。接下來便針對redis的五種結構類型進行操作練習
首先回顧redis的五種類型參數及其操作命令
1. 字符串型 string
set
get
2. 哈希類型 hash
hset
hget / hgetall
3. 列表類型 list
lpush / rpush
lpop / rpop
lrange
4. 集合類型 set
sadd
smembers
5. 有序集合類型 sortedset
zadd
zrange
然後對每種類型進行Java語言的測試操作

    // 測試字符串類型的redis
    @Test
    public void test2(){
        // 1.獲取連接
        Jedis jedis = new Jedis();
        // 2.操作

        jedis.set("password","123");
        String password = jedis.get("password");
        System.out.println(password);

        // 可以使用setex()方法存儲有時效的數據
        // 可以將activeCode,nihao_hehe存入redis服務器,20後會自動被刪除
        jedis.setex("activeCode",20,"nihao_hehe");

        // 3.關閉連接
        jedis.close();
    }
    // 測試哈希類型的redis
    @Test
    public void test3(){
        // 1.獲取連接
        Jedis jedis = new Jedis();
        // 2.操作
        jedis.hset("myset","name","wangwu");
        jedis.hset("myset","age","23");
        jedis.hset("myset","gender","man");
        
        String name = jedis.hget("myset", "name");
        System.out.println(name);

        Map<String, String> myset = jedis.hgetAll("myset");
        // 打印集合keyset方式
        Set<String> keyset = myset.keySet();
        for (String key:keyset){
            String value = myset.get(key);
            System.out.println(value);
        }
        // 3.關閉連接
        jedis.close();
    }
    // 測試列表類型的redis
    @Test
    public void test4(){
        // 1.獲取連接
        Jedis jedis = new Jedis();
        // 2.操作
        jedis.lpush("list","a");
        jedis.lpush("list","f");
        jedis.rpush("list","e");
        jedis.rpush("list","e","b","c");

        List<String> list = jedis.lrange("list", 0, -1);
        System.out.println(list);
        // 3.關閉連接
        jedis.close();
    }
    // 測試集合類型的redis
    @Test
    public void test5(){
        // 1.獲取連接
        Jedis jedis = new Jedis();
        // 2.操作
        jedis.sadd("set","username","zhangsan");
        jedis.sadd("set","password","123");

        jedis.sadd("set","java","php","c#");

        Set<String> set = jedis.smembers("set");
        System.out.println(set);

        // 3.關閉連接
        jedis.close();
    }
    // 測試有序集合類型的redis
    @Test
    public void test6(){
        // 1.獲取連接
        Jedis jedis = new Jedis();
        // 2.操作
        jedis.zadd("sorted",9,"張三");
        jedis.zadd("sorted",3,"李四");
        jedis.zadd("sorted",10,"王五");

        Set<String> sorted = jedis.zrange("sorted", 0, -1);
        System.out.println(sorted);

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

Jedis連接池 JedisPool

Jedis對象中自帶有Jedis連接池,叫做JedisPool;我們可以從連接池中獲取客戶端的連接,這樣就可以對連接進行更好的複用和管理

  • 如何使用?
    1. 創建JedisPool連接池對象
    2. 調用方法getResource()方法獲取Jedis連接
    3. 使用Jedis連接,使用方法與上述一樣
    4. 關閉Jedis連接(歸還到連接池中)
      一般在使用時,還需要創建一個連接池對象,使用該對象的方法進行一些配置,然後再作爲參數傳遞給JedisPool
    // Jedis連接池的使用 JedisPool
    @Test
    public void test7(){

        // 0.創建配置對象
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50);
        config.setMaxIdle(10);

        // 1.創建連接池對象
        JedisPool jedisPool = new JedisPool(config,"localhost",6379);

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

        // 3.使用Jedis
        jedis.set("wewe","wenwen");
        String wewe = jedis.get("wewe");
        System.out.println(wewe);

        // 4.關閉(歸還到連接池中)
        jedis.close();
    }

由於含有配置,上述編寫方式耦合度較高,一般會將Jedis的配置單獨保存,所以一般還需要另外抽取一個JedisPoolUtils工具類,該工具類用來提供創建Jedis連接對象,且創建的該對象已經進行過配置
首先需要一個jedis配置文件jedis.properties;將其拷貝到工程的src下。
然後可以編寫工具類加載該配置文件,並進行配置
工具類的編寫代碼如下

    package com.utils;
    
    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;
    /**
     * JedisPool的工具類
     * 加載配置文件,進行參數配置
     * 提供獲取連接的方法
     */
    public class JedisPoolUtils {

        private static JedisPool jedisPool;
    
        /**
         * 加載配置文件,進行參數配置
         */
        static{
            // 讀取配置文件
            InputStream is = JedisPoolUtils.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")));
        }
        /**
         * 獲取Jedis連接的方法
         */
        public static Jedis getJedis(){
            return jedisPool.getResource();
        }
    
    }

編寫好工具類之後,便可以十分簡單的使用Jedis了

    // JedisPoolUtils的使用
    @Test
    public void test8(){
        // 使用JedisPoolUtils創建連接對象
        Jedis jedis = JedisPoolUtils.getJedis();

        // 使用Jedis
        jedis.set("hello","nihao");

        // 歸還連接
        jedis.close();
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章