Pipeline批量插入和查詢【java版】

一、代碼

1、工具類

package com.cn.until;

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

/**
 *在高版本的jedis jar包,比如本版本2.9.0,JedisPoolConfig沒有setMaxActive和setMaxWait屬性了
 * 這是因爲高版本中官方廢棄了此方法,用以下兩個屬性替換。
 * maxActive  ==>  maxTotal
 * maxWait==>  maxWaitMillis
 */
public class RedisUtil {
    //創建連接池對象
    private static JedisPool pool=null;
    //設定連接超時時間
    private static int POOL_TIMEOUT = 10000;
    //創建連接池
    public static JedisPool getPool(String host,int port,String pwd){
        if(pool==null ){
            JedisPoolConfig config = new JedisPoolConfig();
            //設置jedis的最大實例數
            config.setMaxTotal(500);
            //設置jedis的最大空閒實例數
            config.setMaxIdle(5);
            // 表示當borrow(引入)一個jedis實例時,最大的等待時間,如果超過等待時間,則直接拋出JedisConnectionException;
            config.setMaxWaitMillis(1000 * 10);
            // 在borrow一個jedis實例時,是否提前進行validate操作;如果爲true,則得到的jedis實例均是可用的;
            config.setTestOnBorrow(true);

            pool=new JedisPool(config,host,port,POOL_TIMEOUT,pwd);
        }
        return pool;
    }

    //關閉連接池
    public static void closePool(){
        if(pool!=null){
            pool.close();
        }
    }

    //歸還jedis實例到連接池
    public static void returnJedis2Pool(Jedis jedis){
        if(jedis!=null){
            jedis.close();
        }
    }
}

2、主類

package com.cn.service;

import com.cn.until.RedisUtil;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.Pipeline;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class Pipelined_java {
    public static void main(String[] args) {
        JedisPool pool = RedisUtil.getPool("master", 6379, "123456");
        Jedis jedis = pool.getResource();
        Pipeline pipelined = jedis.pipelined();
        pipelined.select(1);
        //管道批量插入
        ArrayList<String> strings = new ArrayList<>();
        strings.add("aa");
        strings.add("bb");
        strings.add("cc");
        for (String s:strings) {
            pipelined.hset("1",s,s+"11");
            pipelined.hset("2",s,s+"22");
        }
        //管道批量提交
        pipelined.sync();

        //管道批量查詢
        for(int i=1;i<3;i++){
            pipelined.hgetAll(i+"");
        }
        //管道批量提交併批量返回查詢結果
        List<Object> objects =pipelined.syncAndReturnAll();
        for (Object o:objects) {
            //將list元素轉化爲map
            Map<String, String> m=(Map<String, String>)o;
            Set<String> strings1 = m.keySet();
            for (String key:strings1) {
                System.out.println(String.format("key:%s,value:%s",key,m.get(key)));
            }
        }

        System.out.println(objects);
    }
}

二、結果

1、redis庫

master:6379[1]> DBSIZE
(integer) 2
master:6379[1]> keys *
1) "1"
2) "2"
master:6379[1]> hgetall 1
1) "aa"
2) "aa11"
3) "bb"
4) "bb11"
5) "cc"
6) "cc11"
master:6379[1]> hgetall 2
1) "aa"
2) "aa22"
3) "bb"
4) "bb22"
5) "cc"
6) "cc22"
master:6379[1]>

2、程序輸出結果

key:aa,value:aa11
key:bb,value:bb11
key:cc,value:cc11
key:aa,value:aa22
key:bb,value:bb22
key:cc,value:cc22
[{aa=aa11, bb=bb11, cc=cc11}, {aa=aa22, bb=bb22, cc=cc22}]

 

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