標籤: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鎖的應用