redis 並發處理,多線程以及synchronized鎖的應用

來源:互聯網
上載者:User

標籤:java

package com.test.util.redis;


import redis.clients.jedis.Jedis;

import redis.clients.jedis.JedisPool;

import redis.clients.jedis.JedisPoolConfig;


public class RedisUtil implements Runnable {


    private JedisPool pool = null;

    public  volatile int count=0;


    /**

     * @功能:帶參數的建構函式

     * @參數:host,主機名稱或主機IP

     * @參數:port,連接埠

     * @參數:password,訪問Redis資料庫的密碼

     */

    public RedisUtil(String host, int port, String password) {

        if (pool == null) {

            JedisPoolConfig config = new JedisPoolConfig();

            // 控制一個pool可分配多少個jedis執行個體,通過pool.getResource()來擷取;

            // 如果賦值為-1,則表示不限制;如果pool已經分配了maxTotal個jedis執行個體,則此時pool的狀態為exhausted(耗盡)。

            config.setMaxTotal(1);

            pool = new JedisPool(config, host, port, 60000, password);

        }

    }


    /**

     * @功能:通過Redis的key擷取值,並釋放串連資源

     * @參數:key,索引值

     * @返回: 成功返回value,失敗返回null

     */

    public String get(String key){

        Jedis jedis = null;

        String value = null;

        try {

            jedis = pool.getResource();

            value = jedis.get(key);

        } catch (Exception e) {

            pool.returnBrokenResource(jedis);

            e.printStackTrace();

        } finally {

            if(null != pool) {

                pool.returnResource(jedis);        

            }

        }

        return value;

    }


    /**

     * @功能:向redis存入key和value(如果key已經存在 則覆蓋),並釋放串連資源

     * @參數:key,鍵

     * @參數:value,與key對應的值

     * @返回:成功返回“OK”,失敗返回“0”

     */

    public void set(String key,String value){

    Jedis jedis = null;

    synchronized(this){

    try{

    count=count+1;

               jedis = pool.getResource();

               jedis.set(key, value+count);

               System.out.println(jedis.get(key));

} catch (Exception e) {

// TODO Auto-generated catch block

pool.returnBrokenResource(jedis);

            e.printStackTrace();

}finally {

           if(null != pool) {

               pool.returnResource(jedis);        

           }

       }

    }

    }


@Override

public void run() {

System.out.println(Thread.currentThread());

this.set("foo", "bar");

}

}



測試類別:

package com.test.util.redis;


import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.TimeUnit;



public class Jredis {

public static void main(String[] args) {

String host = "localhost";

        String password = null;

        int port = 6379;

        RedisUtil redisUtil = new RedisUtil(host, port, password);

        

        

        ExecutorService es=Executors.newFixedThreadPool(5);

        for(int i=0;i<20;i++){

        es.execute( redisUtil);

//        new Thread(redisUtil).start();

        }

es.shutdown();

try {

es.awaitTermination(100, TimeUnit.MILLISECONDS);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println(" test  over");

        

        

}

}


redis 並發處理,多線程以及synchronized鎖的應用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.