亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > 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
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产视频亚洲视频| 亚洲bt欧美bt日本bt| 国内精品国产三级国产在线专| 亚洲图片制服诱惑| 91夜夜未满十八勿入爽爽影院| 精品在线观看国产| 青青草原一区二区| 自拍偷拍亚洲精品| 最新国产精品拍自在线播放| 国产99久久精品一区二区 夜夜躁日日躁| 国产亚洲欧美aaaa| 国产成人精品久久久| 欧美刺激性大交免费视频| 亚洲精品456在线播放狼人| 一区二区亚洲欧洲国产日韩| 久久精品久久久久电影| 久久精品在线播放| 亚洲欧洲午夜一线一品| 色婷婷成人综合| www.亚洲一二| 成人在线观看视频网站| 久久精品视频播放| 亚洲欧美日韩国产中文| 亚洲精品狠狠操| 精品无人国产偷自产在线| 成人性生交大片免费看视频直播| 久久久精品在线| 国产a∨精品一区二区三区不卡| 欧美人交a欧美精品| 亚洲乱码一区二区| 午夜美女久久久久爽久久| 亚洲va国产va天堂va久久| 亚洲二区在线播放视频| 麻豆精品精华液| 国产欧美一区二区三区久久| 久久久久久久电影一区| 丁香五六月婷婷久久激情| 国产精品v片在线观看不卡| 欧美日韩高清在线观看| 欧美一区二区三区精品电影| 国产精品久久999| 色多多国产成人永久免费网站| 国产一区二区三区视频| 国模吧一区二区三区| 亚洲精品丝袜日韩| 久久久久成人精品| 欧美一性一乱一交一视频| 欧美丰满少妇xxxxx| 中文字幕日韩av电影| 庆余年2免费日韩剧观看大牛| 色yeye香蕉凹凸一区二区av| 美日韩精品免费视频| 97在线免费观看| 国产一区二区三区免费视频| 欧美一乱一性一交一视频| 国产一区二区三区四区福利| 日本高清+成人网在线观看| 欧美高跟鞋交xxxxhd| 久久久久久国产| 欧美成人激情视频| 久久亚洲春色中文字幕| 欧美国产日韩二区| 日韩在线免费av| 高清一区二区三区四区五区| 亚洲国产私拍精品国模在线观看| 久久国产色av| 国产伦精品一区二区三区精品视频| 国产精品亚发布| 亚洲在线观看视频| 亚洲美女www午夜| 欧美日韩一区二区三区| 美日韩精品视频免费看| 日韩精品高清在线观看| 欧洲美女7788成人免费视频| 国产日韩欧美视频在线| 久久91精品国产91久久久| 91免费人成网站在线观看18| 亚洲国产精品福利| 国产精品入口免费视| 中文字幕视频在线免费欧美日韩综合在线看| 久久成人精品电影| 欧美美女15p| 欧美成人精品不卡视频在线观看| 国产精品女人网站| 亚洲午夜av电影| 亚洲最新中文字幕| 91久久精品日日躁夜夜躁国产| 亚洲高清不卡av| 亚洲自拍偷拍网址| 这里只有精品久久| 97在线免费视频| 91欧美精品成人综合在线观看| 精品国产老师黑色丝袜高跟鞋| 日本欧美爱爱爱| 欧美午夜片在线免费观看| 九九视频这里只有精品| 欧美激情视频在线| 精品一区二区三区电影| 亚洲欧美色婷婷| yellow中文字幕久久| 亚洲欧洲日产国产网站| 精品久久久久久久久国产字幕| 欧美日韩一区二区三区| 亚洲自拍另类欧美丝袜| 在线视频欧美日韩| 久久激情视频久久| 色诱女教师一区二区三区| 国产主播精品在线| 中文字幕av一区二区三区谷原希美| 日本免费一区二区三区视频观看| 奇米四色中文综合久久| 亚洲国产91色在线| 亚洲成色999久久网站| 91久久国产婷婷一区二区| 中文字幕亚洲一区| 成人免费看黄网站| 亚洲激情自拍图| 国产精品女人网站| 成人福利视频在线观看| 国产精品久久国产精品99gif| 日韩亚洲国产中文字幕| 久久综合九色九九| 国产男女猛烈无遮挡91| 国产欧亚日韩视频| 亚洲欧美成人一区二区在线电影| 日韩中文字幕国产| 亚洲国产婷婷香蕉久久久久久| 国产精品亚洲综合天堂夜夜| 久久夜精品香蕉| 国产精品黄色av| 中文字幕亚洲欧美日韩在线不卡| 91国偷自产一区二区三区的观看方式| 精品自拍视频在线观看| 国产精品一久久香蕉国产线看观看| 亚洲精品永久免费精品| 精品国产乱码久久久久酒店| 国产福利精品视频| 欧美日韩精品中文字幕| 国产美女直播视频一区| 色综合色综合久久综合频道88| 亚洲第一视频网站| 欧美多人爱爱视频网站| 国产男女猛烈无遮挡91| 国产精品久久久999| 久久精品国产99国产精品澳门| 亚洲一区二区久久久久久| 国产深夜精品福利| 国产精品美乳一区二区免费| 国产91精品久久久久久| 欧美福利小视频| 欧美一区二区三区……| 亚洲成人av在线| 日韩在线观看电影| 欧美电影免费在线观看| 中文字幕在线看视频国产欧美在线看完整| 亚洲va男人天堂| 91产国在线观看动作片喷水| 国产精品亚洲自拍| 久久久久久久久久久免费| 国产精品久久久久久五月尺| 欧美成人免费网| 日韩精品亚洲元码| 亚洲精品综合久久中文字幕| 色噜噜国产精品视频一区二区|