1. 程式人生 > >jedis連線池詳解(Redis)

jedis連線池詳解(Redis)

轉自:http://tianxingzhe.blog.51cto.com/3390077/1684306

原子性(atomicity):

一個事務是一個不可分割的最小工作單位,事務中包括的諸操作要麼都做,要麼都不做。

Redis所有單個命令的執行都是原子性的,這與它的單執行緒機制有關;

Redis命令的原子性使得我們不用考慮併發問題,可以方便的利用原子性自增操作INCR實現簡單計數器功能;

單機模式

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 package com.ljq.utils; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; /**    * Redis操作介面 * * @author 林計欽 * @version 1.0 2013-6-14 上午08:54:14    */ public class RedisAPI { private static JedisPool pool = null; /** * 構建redis連線池
* @param ip * @param port * @return JedisPool */ public static JedisPool getPool() { if (pool == null) { JedisPoolConfig config = new JedisPoolConfig(); //控制一個pool可分配多少個jedis例項,通過pool.getResource()來獲取; //如果賦值為-1,則表示不限制;如果pool已經分配了maxActive個jedis例項,則此時pool的狀態為exhausted(耗盡)。 config.setMaxActive(
500); //控制一個pool最多有多少個狀態為idle(空閒的)的jedis例項。 config.setMaxIdle(5); //表示當borrow(引入)一個jedis例項時,最大的等待時間,如果超過等待時間,則直接丟擲JedisConnectionException; config.setMaxWait(1000 100); //在borrow一個jedis例項時,是否提前進行validate操作;如果為true,則得到的jedis例項均是可用的; config.setTestOnBorrow(true); pool = new JedisPool(config, "192.168.2.191"8888); } return pool; } /** * 返還到連線池 * @param pool  * @param redis */ public static void returnResource(JedisPool pool, Jedis redis) { if (redis != null) { pool.returnResourceObject(redis); } } /** * 獲取資料 * @param key * @return */ public static String get(String key){ String value = null; JedisPool pool = null; Jedis jedis = null; try { pool = getPool(); jedis = pool.getResource(); value = jedis.get(key); catch (Exception e) { //釋放redis物件 pool.returnBrokenResource(jedis); e.printStackTrace(); finally { //返還到連線池 returnResource(pool, jedis); } return value; } }

參考文章:

分散式模式 

ShardedJedis是基於一致性雜湊演算法實現的分散式Redis叢集客戶端

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 package com.jd.redis.client; import java.util.ArrayList; import java.util.List; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.ShardedJedis; import redis.clients.jedis.ShardedJedisPool; import redis.clients.util.Hashing; import redis.clients.util.Sharded; publicclass RedisShardPoolTest { static ShardedJedisPoolpool; static{ JedisPoolConfig config =new JedisPoolConfig();//Jedis池配置 config.setMaxActive(500);//最大活動的物件個數 config.setMaxIdle(1000 60);//物件最大空閒時間 config.setMaxWait(1000 10);//獲取物件時最大等待時間 config.setTestOnBorrow(true); String hostA = "10.10.224.44"; int portA = 6379; String hostB = "10.10.224.48"; int portB = 6379; List<JedisShardInfo> jdsInfoList =new ArrayList<JedisShardInfo>(2); JedisShardInfo infoA = new JedisShardInfo(hostA, portA); infoA.setPassword("redis.360buy"); JedisShardInfo infoB = new JedisShardInfo(hostB, portB); infoB.setPassword("redis.360buy"); jdsInfoList.add(infoA); jdsInfoList.add(infoB); pool =new ShardedJedisPool(config, jdsInfoList, Hashing.MURMUR_HASH, Sharded.DEFAULT_KEY_TAG_PATTERN); //傳入連線池配置、分散式redis伺服器主機資訊、分片規則(儲存到哪臺redis伺服器) } /** * @param args */ publicstaticvoid main(String[] args) { for(int i=0; i<100; i++){ String key =generateKey(); //key += "{aaa}"; ShardedJedis jds =null; try { jds =pool.getResource(); System.out.println(key+":"+jds.getShard(key).getClient().getHost()); System.out.println(jds.set(key,"1111111111111111111111111111111")); }catch (Exception e) { e.printStackTrace(); } finally{ pool.returnResourceObject(jds); } } } privatestaticintindex = 1; publicstatic String generateKey(){ return String.valueOf(Thread.currentThread().getId())+"_"+(index++); } }

參考文章:

相關推薦

jedis連線(Redis)

轉自:http://tianxingzhe.blog.51cto.com/3390077/1684306 原子性(atomicity): 一個事務是一個不可分割的最小工作單位,事務中包括的諸操作要麼都做,要麼都不做。 Redis所有單個命令的執行都是原子性的,這與它的單執行緒機制有關; Redis命令

jedis連接(Redis)

自增 tid bject pack cti .html red stat 分布式redis 原子性(atomicity): 一個事務是一個不可分割的最小工作單位,事務中包括的諸操作要麽都做,要麽都不做。 Redis所有單個命令的執行都是原子性的,這與它的單線程機制有關; R

httpclient架構原理介紹 & 連線

本篇重點介紹httpclient連線池的相關原理以及介紹,順帶的介紹httpclient傳送請求時的簡單介紹,並會帶上一些原始碼分析。本篇博文是基於httpclient的4.5.2版本進行介紹的。 一、傳送請求的流程原理 幾個關鍵的類和介面介紹 在

Java連線

http://www.javaweb1024.com/java/JavaWebzhongji/2015/06/01/736.html 對於共享資源,有一個很著名的設計模式:資源池(Resource Pool)。該模式正是為了解決資源的頻繁分配﹑釋放所造成的問題。

資料庫連線與程式碼實現

一、資料庫連線池概念        資料庫連線池:負責分配、管理和釋放資料庫連線,它允許應用程式重複使用一個現有的資料庫連線,而不是再重新建立一個;釋放空閒時間超過最大空閒時間的資料庫連線來避免因為沒有釋放資料庫連線而引起的資料庫連線遺漏。這項技術能明顯提高對資料庫操作的效

連線,c3p0與dbcp的區別!

連線池:    連線池是建立和管理一個連線的緩衝池的技術,這些連線準備好被任何需要它們的執行緒使用。這項技術能明顯提高對資料庫操作的效能。  連線池的好處:(1)對於大多數應用程式,當它們正在處理事務時,僅需要能夠訪問JDBC連線的 1 個執行緒。當不處理事務時,這個連線就會

spring學習筆記(17)資料庫配置[1]spring資料連線

資料連線池 在spring中,常使用資料庫連線池來完成對資料庫的連線配置,類似於執行緒池的定義,資料庫連線池就是維護有一定數量資料庫連線的一個緩衝池,一方面,能夠即取即用,免去初始化的時間,另一方面,用完的資料連線會歸還到連線池中,這樣就免去了不必要的連線建立

Tomcat 連線數與執行緒 | BIO/NIO有何不同 | 簡談Kafka中的NIO網路通訊模型

前言 在使用tomcat時,經常會遇到連線數、執行緒數之類的配置問題,要真正理解這些概念,必須先了解Tomcat的聯結器(Connector)。 在前面的文章 詳解Tomcat配置檔案server.xml 中寫到過:Connector的主要功能,是接收連線請求,建立Req

Java中使用Redisjedis連線連線redis/spring整合redis

開始在 Java 中使用 Redis 前, 我們需要確保已經安裝了 redis 服務及 Java redis 驅動1、下載最新驅動包:https://mvnrepository.com/artifact/redis.clients/jedis;jedis-2.9.0.jar;

REDIS學習(5)jedisjedis連線

一,準備 目前情況是 srping boot中測試程式碼 mvn的包為: <dependency> <groupId>org.springframework.boot</groupId><!-- 會附帶引進jedis-2

Jedis簡介,Jedis連線 HelloWorld實現,設定redis連線密碼,Jedis 連線例項,

Jedis簡介 實際開發中,我們需要用Redis的連線工具連線Redis然後操作Redis, 對於主流語言,Redis都提供了對應的客戶端; Jedis連線 HelloWorld實現 建一個Maven專案, pom里加下jedis依賴, 1 2 3 4

redis提示Could not get a resource from the pool(jedis連線配置)

起初在JedisPool中配置了50個活動連線,但是程式還是經常報錯:Could not get a resource from the pool 連線池剛開始是這樣配置的: JedisPoolConfig config = new JedisPoolConfig(

Redis 可視化圖形監控界面 RedisLive

redis作為一款開源的 Redis 圖形化監控工具,RedisLive 提供對 Redis 實例的內存使用情況,接收的客戶端命令,接收的請求數量以及鍵進行監控。RedisLive 的工作原理基於 Redis 的 INFO 和 MONITOR 命令,通過向 Redis 實例發送 INFO 和 MONITOR

Java常量

回收 array 數值 編譯期 二進制格式 new 保持 占用 get 轉自:http://www.cnblogs.com/iyangyuan/p/4631696.html jvm虛擬內存分布圖: 程序計數器:JVM執行程序的流水線。 本地方法棧:JVM調用操作系統方法所

java 常量

例如 ava color str blog 註意 如果 .cn 運行 參考資料:http://www.cnblogs.com/holos/p/6603379.html 註意: 1.首先,我們平時在討論字符串新建問題時所說的常量池其實指的是全局字符串常量池。並不是運行時常量池

Java線程

最大 rar exception subject alt mod allow 隨著 double 一、線程池初探 所謂線程池,就是將多個線程放在一個池子裏面(所謂池化技術),然後需要線程的時候不是創建一個線程,而是從線程池裏面獲取一個可用的線程,然後執行我們的任務。線程池

Java高並發之線程

大小 eight nds 程序退出 zab ron 策略 ace bubuko 線程池優勢 在業務場景中, 如果一個對象創建銷毀開銷比較大, 那麽此時建議池化對象進行管理. 例如線程, jdbc連接等等, 在高並發場景中, 如果可以復用之前銷毀的對象, 那麽系統效率將大大提

連接,c3p0與dbcp的區別!

次數 數據庫連接池 data 的區別 其中 數據庫服務 耗時 JD cto 連接池: 連接池是創建和管理一個連接的緩沖池的技術,這些連接準備好被任何需要它們的線程使用。這項技術能明顯提高對數據庫操作的性能。 連接池的好處:(1)對於大多數應用程序,當它們正在處理事務

幹貨 | Tomcat 連接數與線程

非阻塞 取出 http1 pri num 應用層 close wait 支持 前言 在使用tomcat時,經常會遇到連接數、線程數之類的配置問題,要真正理解這些概念,必須先了解Tomcat的連接器(Connector)。 在前面的文章 詳解Tomcat配置文件server.

Jedis連線

1.前言     公司使用阿里雲的雲資料庫Redis,在Spirng的配置中,傳統的Jedis配置已經不合適了,因為本地連線雲Redis服務需要輸入密碼才行,這樣只有JedisPool中才有輸入驗證密碼的屬性,於是採用了JedisPool的方式來連線單擊的Redis