使用Jedis操作Redis


目錄

一、快速上手

  1.1、導入依賴

  1.2、第一個示例

二、使用Jedis連接池

  2.1、使用示例

  2.2、封裝工具類

三、使用Jedis連接Redis集群

  3.1、單純的JedisCluster

  3.2、配合使用連接池

 

 

 

 

一、快速上手

1.1、導入依賴

  jedis的github網址:https://github.com/xetorthio/jedis

  maven倉庫信息:https://mvnrepository.com/artifact/redis.clients/jedis

  本文所使用的的是最新的3.2.0版本,jedis的maven依賴xml如下:

<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>3.2.0</version>
</dependency>

  

1.2、第一個示例

  測試的時候,使用本地安裝的redis,所以先將本地的redis服務器啟動

  

 

  導入以來以后,可以創建一個單元測試類進行測試

package cn.ganlixin.redis;

import org.junit.Test;
import redis.clients.jedis.Jedis;

public class JedisExample {

    @Test
    public void testFirstExample() {
        // 連接redis
        Jedis jedis = new Jedis("localhost", 6379);
        // Jedis jedis = new Jedis("localhost"); // 默認6379端口

        // string類型
        jedis.set("name", "demo");
        String name = jedis.get("name");

        // list類型
        jedis.lpush("myList", "hello");
        jedis.rpush("myList", "world");
        String lpopVal = jedis.lpop("myList");
        String rpopVal = jedis.rpop("myList");

        // set類型
        jedis.sadd("mySet", "123");
        jedis.sadd("mySet", "456");
        jedis.sadd("mySet", "789");
        jedis.srem("mySet", "789");
        jedis.scard("mySet");

        // zset類型
        jedis.zadd("myZset", 99, "X");
        jedis.zadd("myZset", 90, "Y");
        jedis.zadd("myZset", 97, "Z");
        Double zscore = jedis.zscore("myZset", "Z");

        // 其他
        jedis.incr("intKey");
        jedis.incrBy("intKey", 5);
        jedis.del("intKey");

        // 觸發持久化
        // jedis.save();
        // jedis.bgsave()

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

  

  執行完畢后,可以通過redis客戶端工具,登錄到redis服務器查看存儲的值

  

 

二、使用Jedis連接池

 

2.1、使用示例

  仍舊使用上面的maven依賴,示例代碼如下

package cn.ganlixin.redis;

import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisPoolExample {

    @Test
    public void testUsePool() {

        // 配置連接池
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(20);
        config.setMaxIdle(10);
        config.setMinIdle(5);

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

        Jedis jedis = jedisPool.getResource();

        // 使用jedis進行操作
        jedis.set("name", "otherNameVal");

        // 用完之后,一定要手動關閉連接(歸還給連接池)
        jedis.close();
    }
}

 

2.2、封裝工具類

  對於jedis連接池來說,只需要初始化一次即可,所以可以將其在工具類中實現,下面是我寫的示例:

package cn.ganlixin.redis.util;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * 描述: Jedis工具類(封裝了連接池)
 */
public class JedisUtils {

    private static JedisPool jedisPool;

    static {
        // 配置連接池
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(5);
        config.setMaxIdle(3);
        config.setMinIdle(2);

        // 創建連接池
        jedisPool = new JedisPool(config, "localhost", 6379);
    }

    /**
     * 獲取redis連接
     */
    public static Jedis getJedis() {
        return jedisPool.getResource();
    }
}

  

  配置項可以從配置文件中獲取,下面是使用示例:

package cn.ganlixin.redis;

import cn.ganlixin.redis.util.JedisUtils;
import org.junit.Test;
import redis.clients.jedis.Jedis;

public class JedisPoolExample {

    @Test
    public void testJedisPoolUtil() {
        Jedis jedis = JedisUtils.getJedis();
        jedis.set("name123", "demo");

        // 一定要關閉jedis連接
        jedis.close();
    }
}

  使用Jedis連接池,最重要的就是:一定要手動關閉連接(釋放連接),否則會因為連接耗盡而導致操作阻塞

  

三、使用Jedis連接Redis集群

  要使用jedis操作Redis集群,就必須先有一個redis集群,redis集群的搭建方式,可以參考:Redis集群搭建

3.1、單純的JedisCluster

  這里的單純,是指先簡單可以下JedisCluster的用法,沒有涉及到連接池相關的,后面會與連接池配合使用

package cn.ganlixin.redis;

import org.junit.Test;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;

import java.util.HashSet;
import java.util.Set;

/**
 * Jedis操作Redis集群
 */
public class JedisClusterExample {

    @Test
    public void testExample() {
        // 設置redis集群的節點信息
        Set<HostAndPort> nodes = new HashSet<>();
        nodes.add(new HostAndPort("192.168.1.3", 6379));
        nodes.add(new HostAndPort("192.168.1.4", 6379));
        nodes.add(new HostAndPort("192.168.1.5", 6379));

        // 創建jediscluster,可以理解為jedis對象
        JedisCluster cluster = new JedisCluster(nodes);

        // 和jedis的使用方式幾乎一樣
        cluster.set("name", "nameDemo");

        // 使用完畢后,不需要釋放連接
        // cluster.close();
    }
}

  

3.2、配合使用連接池

  JedisCluster增加連接池,只需要配置一下連接池即可,示例如下:

package cn.ganlixin.redis;

import org.junit.Test;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;

import java.util.HashSet;
import java.util.Set;

/**
 * Jedis操作Redis集群
 */
public class JedisClusterExample {

    @Test
    public void clusterWithPool() {

        // 設置redis集群的節點信息
        Set<HostAndPort> nodes = new HashSet<>();
        nodes.add(new HostAndPort("192.168.1.3", 6379));
        nodes.add(new HostAndPort("192.168.1.4", 6379));
        nodes.add(new HostAndPort("192.168.1.5", 6379));

        // 配置連接池
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(5);
        jedisPoolConfig.setMaxIdle(3);
        jedisPoolConfig.setMinIdle(2);

        // 創建jediscluster,傳入節點列表和連接池配置
        JedisCluster cluster = new JedisCluster(nodes, jedisPoolConfig);

        // 和jedis的使用方式幾乎一樣
        cluster.set("name", "nameDemo2121");

        // 使用完畢后,不需要釋放連接
        // cluster.close();
    }
}

  執行程序,在命令行中登錄到redis集群查看

  

 

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM