1.Eclipse配置
2.HelloWorld
|
import redis.clients.jedis.Jedis;
public class TestPing { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1",6379); System.out.println(jedis.ping()); } } |
3.Jedis常見操作
|
import java.util.Set;
import redis.clients.jedis.Jedis;
public class TestAPI { public static void main(String[] args) {
Jedis jedis = new Jedis("127.0.0.1",6379); jedis.set("k1", "v1"); jedis.set("k2", "v2"); jedis.set("k3", "v3");
System.out.println(jedis.get("k1")); Set<String> sets = jedis.keys("*"); System.out.println(sets.toString()); System.out.println(sets.size()); } } |
4.Redis主從復制
|
import redis.clients.jedis.Jedis;
public class TestMS {
public static void main(String[] args) { Jedis jedisM = new Jedis("127.0.0.1",6379); Jedis jedisS = new Jedis("127.0.0.1",6380);
jedisS.slaveof("127.0.0.1",6379); jedisM.set("k1", "v1"); System.out.println(jedisS.get("k1"));
} } |
5.Redis事務
|
import javax.swing.plaf.basic.BasicTreeUI.TreeCancelEditingAction;
import redis.clients.jedis.Jedis; import redis.clients.jedis.Transaction;
public class TestTX {
public boolean transMethod() throws InterruptedException { Jedis jedis = new Jedis("127.0.0.1", 6379); int balance;// 可用余額 int debt;// 欠額 int amtToSubtract = 10;// 實刷額度
jedis.watch("balance"); // jedis.set("balance","5");//此句不該出現,講課方便,模擬其他程式已經修改了該條目 Thread.sleep(7000); balance = Integer.parseInt(jedis.get("balance")); if (balance < amtToSubtract) { jedis.unwatch(); System.out.println("modify"); return false; } else { System.out.println("***********transaction"); Transaction transaction = jedis.multi(); transaction.decrBy("balance", amtToSubtract); transaction.incrBy("debt", amtToSubtract); transaction.exec(); balance = Integer.parseInt(jedis.get("balance")); debt = Integer.parseInt(jedis.get("debt"));
System.out.println("*******" + balance); System.out.println("*******" + debt); return true; } }
/** * 通俗點講,watch命令就是標記一個鍵,如果標記了一個鍵, 在提交事務前如果該鍵被別人修改過,那事務就會失敗,這種情況通常可以在程式中 * 重新再嘗試一次, * 首先標記了鍵balance,然后檢查余額是否足夠,不足就取消標記,并不做扣減; 足夠的話,就啟動事務進行更新操作, * 如果在此期間鍵balance被其它人修改, 那在提交事務(執行exec)時就會報錯, 程式中通常可以捕獲這類錯誤再重新執行一次,直到成功, * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { TestTX test = new TestTX(); boolean retValue = https://www.cnblogs.com/CSAH/p/test.transMethod(); System.out.println("main retValue-------: " + retValue); } }
|
6.Redis執行緒池
|
import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig;
public class JedisPoolUtil {
private static volatile JedisPool jedisPool = null;
private JedisPoolUtil(){}
public static JedisPool getJedisPoolUtil(){ if(null==jedisPool){ synchronized(JedisPoolUtil.class){ if(null==jedisPool){ JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxActive(1000); poolConfig.setMaxIdle(32); poolConfig.setMaxWait(100*1000); poolConfig.setTestOnBorrow(true); jedisPool = new JedisPool(poolConfig,"127.0.0.1",6379); } } } return jedisPool; }
public static void release(JedisPool jedisPool,Jedis jedis){ if(null!=jedis){ jedisPool.returnResourceObject(jedis); } } } |
|
import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool;
public class TEstPool {
public static void main(String[] args) {
JedisPool jedisPool = JedisPoolUtil.getJedisPoolUtil();
Jedis jedis = null; try{ jedis = jedisPool.getResource(); jedis.set("aa", "bb"); }catch(Exception e){ e.printStackTrace(); }finally{ JedisPoolUtil.release(jedisPool, jedis); } } } |
7.RedisPool配置
|
JedisPool的配置引數大部分是由JedisPoolConfig的對應項來賦值的,
maxActive:控制一個pool可分配多少個jedis實體,通過pool.getResource()來獲取;如果賦值為-1,則表示不限制;如果pool已經分配了maxActive個jedis實體,則此時pool的狀態為exhausted, maxIdle:控制一個pool最多有多少個狀態為idle(空閑)的jedis實體; whenExhaustedAction:表示當pool中的jedis實體都被allocated完時,pool要采取的操作;默認有三種, WHEN_EXHAUSTED_FAIL --> 表示無jedis實體時,直接拋出NoSuchElementException; WHEN_EXHAUSTED_BLOCK --> 則表示阻塞住,或者達到maxWait時拋出JedisConnectionException; WHEN_EXHAUSTED_GROW --> 則表示新建一個jedis實體,也就說設定的maxActive無用; maxWait:表示當borrow一個jedis實體時,最大的等待時間,如果超過等待時間,則直接拋JedisConnectionException; testOnBorrow:獲得一個jedis實體的時候是否檢查連接可用性(ping());如果為true,則得到的jedis實體均是可用的;
testOnReturn:return 一個jedis實體給pool時,是否檢查連接可用性(ping());
testWhileIdle:如果為true,表示有一個idle object evitor執行緒對idle object進行掃描,如果validate失敗,此object會被從pool中drop掉;這一項只有在timeBetweenEvictionRunsMillis大于0時才有意義;
timeBetweenEvictionRunsMillis:表示idle object evitor兩次掃描之間要sleep的毫秒數;
numTestsPerEvictionRun:表示idle object evitor每次掃描的最多的物件數;
minEvictableIdleTimeMillis:表示一個物件至少停留在idle狀態的最短時間,然后才能被idle object evitor掃描并驅逐;這一項只有在timeBetweenEvictionRunsMillis大于0時才有意義;
softMinEvictableIdleTimeMillis:在minEvictableIdleTimeMillis基礎上,加入了至少minIdle個物件已經在pool里面了,如果為-1,evicted不會根據idle time驅逐任何物件,如果minEvictableIdleTimeMillis>0,則此項設定無意義,且只有在timeBetweenEvictionRunsMillis大于0時才有意義;
lifo:borrowObject回傳物件時,是采用DEFAULT_LIFO(last in first out,即類似cache的最頻繁使用佇列),如果為False,則表示FIFO佇列;
================================================================================================================== 其中JedisPoolConfig對一些引數的默認設定如下: testWhileIdle=true minEvictableIdleTimeMills=60000 timeBetweenEvictionRunsMillis=30000 numTestsPerEvictionRun=-1 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/183399.html
標籤:其他
上一篇:Redis復制
下一篇:通過正則化擴展回歸庫
