天天看點

【Jedis】如何用Java操作Redis——Jedis+連接配接池+工具類

Jedis

Jedis是一款java操作redis資料庫的工具(類似于JDBC操作MySql資料庫,但更加簡單)

下面,将示範Jedis的快速入門,以及操作string、hash、list、set、zset等value資料結構的鍵值對

------------------------------------------------- 快速入門 -----------------------------------------------------

1.導入jar包
2.使用:

Jedis jedis = new Jedis("localhost", 6379);			// 擷取連接配接(可以空參,預設值的主機和端口号就是localhost:6379)
jedis.set("name", "Alice");							// 操作Redis
jedis.close()										// 關閉連接配接

           
☑ 下面僅僅示範"最簡單最常用的指令",其他指令的"方法名"都是由"Redis原生指令"轉化來的

------------------------------------------------- string -----------------------------------------------------
jedis.set("username", "Alice");				// value不能寫成數字整形,沒有這種重載(233 寫成 "233")
jedis.get("username");
jedis.setex("username", 10, "Alice");		// 指定過期時間為10s

------------------------------------------------- hash -----------------------------------------------------
jedis.hset("myhash", "name", "Alice");
jedis.hset("myhash", "age", "12");

jedis.hget("myhash", "name");
jedis.hgetAll("myhash");					// 傳回Map<String, String>

------------------------------------------------- list -----------------------------------------------------
jedis.lpush("mylist", "a", "b", "c");
jedis.rpush("mylist", "a", "b", "c");
jedis.lpop("mylist");
jedis.rpop("mylist");

jedis.lrange("mylist", 0, -1);				// 傳回List<String>

------------------------------------------------- set -----------------------------------------------------
jedis.sadd("myset", "Alice", "Cocoa","Hana");
jedis.smembers("myset");					// 傳回Set<String>

------------------------------------------------- zset -----------------------------------------------------

jedis.zadd("myzset", 100, "Alice");
jedis.zadd("myzset", 300, "Cocoa");
jedis.zadd("myzset", 900, "Hana");
jedis.zrange("myzset", 0, -1);				// 傳回Set<String>

           

JedisPool——Jedis連接配接池

使用JedisPool連接配接池無需額外導入jar包(Jedis的jar包就夠) ! ! !
// 1.建立連接配接池對象(空參)
JedisPool jedisPool = new JedisPool();
// 2.擷取連接配接
Jedis jedis = jedisPool.getResource();
// 3.使用
jedis.set("loli", "Alice");
// 4.釋放連接配接
jedis.close();
           
// 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.set("loli", "Alice");
// 4.歸還連接配接
jedis.close();
           

JedisPoolUtils工具類

上面我們通過JedisPoolConfig配置對象直接指派來進行連接配接池的配置,這顯然不是最佳的選擇

最好将配置資訊寫在配置檔案中,在生成連接配接池時加載配置檔案——這些行為,寫在一個工具類的靜态代碼塊中是一個不錯的選擇

--------------------------------------------- jedis.properties ------------------------------------------------
ip=xxxxxx  				# redis伺服器的IP    
port=6379				# redis伺服器的Port   
maxTotal=1000    		# 最大活動對象數  
maxIdle=100  			# 最大能夠保持idle狀态的對象數   
minIdle=50				# 最小能夠保持idle狀态的對象數        
maxWaitMillis=10000		# 當池内沒有傳回對象時,最大等待時間        
           
--------------------------------------------- jedisUtils.java ------------------------------------------------
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.io.*;
import java.util.Properties;

/**
 * JedisPool工具類
 *      1.加載配置檔案,配置連接配接池的參數
 *      2.提供擷取連接配接的方法
 */
public class JedisPoolUtils {

    private static JedisPool jedisPool;

    /**
     * 靜态代碼塊————加載配置檔案,new出連接配接池
     */
    static {
        // 1.讀取配置檔案位元組流 → 建立Properties對象 → 關聯(load)檔案
        //InputStream stream = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
        InputStream stream = null;
        try {
            stream = new FileInputStream(new File("src/jedis.properties"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        Properties pro = new Properties();
        try {
            pro.load(stream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 2.擷取配置,設定到JedisPoolConfig中
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
        config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));

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

    /**
     * 靜态方法————擷取連接配接
     * @return
     */
    public static Jedis getJedis(){
        return jedisPool.getResource();
    }

}
           

追加:JedisPoolUtils工具類引用properties的路徑問題

/**
* 靜态代碼塊————加載配置檔案,new出連接配接池
*/
static {
    // step1————讀取配置檔案位元組流--建立properties對象--關聯(load)
    InputStream stream = null;
    Properties properties = new Properties();
    try {
        URL url = Class.forName(JedisUtils.class.getName()).getClassLoader().getResource("jedis.properties");
        stream = new FileInputStream(url.getFile());
        properties.load(stream);
    } catch (ClassNotFoundException | IOException e) {
        e.printStackTrace();
    }

    // step2————擷取配置,設定到JedisPoolConfig中
    JedisPoolConfig config = new JedisPoolConfig();
    config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
    config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));

    // step3————初始化pool連接配接池
    jedisPool = new JedisPool(config, properties.getProperty("ip"), Integer.parseInt(properties.getProperty("port")));

}
           

End ♬

by a Lolicon ✪