国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Redis的Java客戶端Jedis

2019-11-06 06:54:52
字體:
來源:轉載
供稿:網友

Redis 的 java 客戶端 Jedis

一、Jedis 所需要的 jar 包

<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.2</version></dependency><dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version></dependency>

二、Jedis 常用操作

2.1、測試連通性

public class Demo01 { public static void main(String[] args) { //連接本地的 Redis 服務 Jedis jedis = new Jedis("127.0.0.1",6379); //查看服務是否運行,打出pong表示OK System.out.控制臺輸出

PONG

2.2、5+1

一個 key ,五大數據類型

package test;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;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); //key Set<String> sets = jedis.keys("*"); for(Iterator iterator = sets.iterator();iterator.hasNext();){ String key = (String) iterator.next(); System.out.println(key); } System.out.println("jedis.exists====>"+jedis.exists("k2")); System.out.println(jedis.ttl("k1")); //String System.out.println(jedis.get("k1")); jedis.set("k4", "v4"); System.out.println("----------------------------------"); jedis.mset("str1","v1","str2","v2","str3","v3"); System.out.println(jedis.mget("str1","str2","str3")); //list System.out.println("----------------------------------"); jedis.lpush("mylist", "v1","v2","v3","v4","v5"); List<String> list = jedis.lrange("mylist", 0, -1); for(String element:list){ System.out.println(element); } //set System.out.println("----------------------------------"); jedis.sadd("orders", "jd001"); jedis.sadd("orders", "jd002"); jedis.sadd("orders", "jd003"); Set<String> set1 = jedis.smembers("orders"); for(Iterator iterator = set1.iterator();iterator.hasNext();){ String string = (String) iterator.next(); System.out.println(string); } jedis.srem("orders", "jd002"); System.out.println(jedis.smembers("orders").size()); //hash System.out.println("----------------------------------"); jedis.hset("hash1", "userName", "lisi"); System.out.println(jedis.hget("hash1", "userName")); Map<String, String> map = new HashMap<String, String>(); map.put("telphone", "13811814763"); map.put("address", "atguigu"); map.put("email", "abc@163.com"); jedis.hmset("hash2", map); List<String> result =jedis.hmget("hash2", "telphone","email"); for(String element : result){ System.out.println(element); } //zset System.out.println("----------------------------------"); jedis.zadd("zset01", 60d,"v1"); jedis.zadd("zset01", 70d,"v2"); jedis.zadd("zset01", 80d,"v3"); jedis.zadd("zset01", 90d,"v4"); Set<String> s1 = jedis.zrange("zset01", 0, -1); for(Iterator iterator = s1.iterator();iterator.hasNext();){ String string = (String) iterator.next(); System.out.println(string); } }}

2.3、事務提交

日常

package test;import com.sun.prism.impl.Disposer.Target;import redis.clients.jedis.Jedis;import redis.clients.jedis.Transaction;public class TestTx { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1", 6379); Transaction transaction = jedis.multi(); transaction.set("k44", "v44"); transaction.set("k55", "v55"); //transaction.exec(); transaction.discard(); }}

加鎖

import com.sun.prism.impl.Disposer.Target;import redis.clients.jedis.Jedis;import redis.clients.jedis.Transaction;public class TestTx { public boolean transMethod(){ Jedis jedis = new Jedis("127.0.0.1", 6379); int balance;// 可用余額 int debt;// 欠額 int amtToSubtract = 10;// 實刷額度 jedis.watch("balance"); //jedis.set("balance","5");//此句不該出現,講課方便。模擬其他程序已經修改了該條目 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){ TestTx test = new TestTx(); boolean retValue = test.transMethod(); System.out.println("main retValue-------: " + retValue); }}

2.4、主從復制

6379,6380啟動,先各自先獨立主寫從讀package test;import redis.clients.jedis.Jedis;public class TestMS { public static void main(String[] args) { Jedis jedis_M = new Jedis("127.0.0.1", 6379); Jedis jedis_S = new Jedis("127.0.0.1", 6380); jedis_S.slaveof("127.0.0.1", 6379); jedis_M.set("class", "1122vv"); String result = jedis_S.get("class"); System.out.println(result); }}

三、JedisPool

Jedis 實例需要從 JedisPool 中獲取用完 Jedis 實例需要返還給 JedisPool如果 Jedis 在使用過程中出錯,則也需要還給 JedisPool

案例

JedisPoolUtil.java

package test;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 getJedisPoolInstance(){ if(null == jedisPool){ synchronized (JedisPoolUtil.class) { if(null == jedisPool){ JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(1000); poolConfig.setMaxIdle(32); poolConfig.setMaxWaitMillis(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); } }}

TestPool.java

package test;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;public class TestPool { public static void main(String[] args) { JedisPool jedisPool = JedisPoolUtil.getJedisPoolInstance(); Jedis jedis = null; try { jedis = jedisPool.getResource(); jedis.set("aa", "bb"); } catch (Exception e) { e.printStackTrace(); }finally{ JedisPoolUtil.release(jedisPool, jedis); } }}

配置總結

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=trueminEvictableIdleTimeMills=60000timeBetweenEvictionRunsMillis=30000numTestsPerEvictionRun=-1
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 太仓市| 海口市| 荆门市| 云梦县| 进贤县| 长沙市| 龙游县| 天镇县| 水富县| 高青县| 修文县| 东阳市| 井冈山市| 嵩明县| 青铜峡市| 原平市| 太仆寺旗| 仪征市| 呼玛县| 铁岭市| 利辛县| 夏邑县| 夏邑县| 白沙| 双峰县| 浙江省| 红安县| 徐水县| 廉江市| 金秀| 临邑县| 涿州市| 通州市| 沛县| 灵宝市| 石门县| 靖边县| 广昌县| 广州市| 漯河市| 英吉沙县|