1. 程式人生 > >客戶端分片使用ShardedJedisPool,設定DB和超時時間

客戶端分片使用ShardedJedisPool,設定DB和超時時間

在使用jedis(2.7.2)做redis 客戶端Sharding的時候,發現ShardedJedisPool裡沒有設定DB和超時時間的地方,看了JedisShardInfo的原始碼,裡面的構造方法要麼只能設定超時時間,要麼只能設定DB,沒有同時設定這兩個的方法。 

public JedisShardInfo(String host) {
    super(Sharded.DEFAULT_WEIGHT);
    URI uri = URI.create(host);
    if (JedisURIHelper.isValid(uri)) {
      this.host = uri.getHost();
      this.port = uri.getPort();
      this.password = JedisURIHelper.getPassword(uri);
      this.db = JedisURIHelper.getDBIndex(uri);
    } else {
      this.host = host;
      this.port = Protocol.DEFAULT_PORT;
    }
  }

public JedisShardInfo(String host, int port, int connectionTimeout, int soTimeout, int weight) {
    super(weight);
    this.host = host;
    this.port = port;
    this.connectionTimeout = connectionTimeout;
    this.soTimeout = soTimeout;
  }

看起來只能自己繼承JedisShardInfo來實現以上的功能,程式碼也比較簡單

程式碼如下

/**
 * 重寫JedisShardInfo
 *
 */
public class MyJedisShardInfo extends JedisShardInfo{

    public MyJedisShardInfo(String host, int connectionTimeout, int soTimeout) {

        super(host);
        // 設定超時時間
        this.setConnectionTimeout(connectionTimeout);
        this.setSoTimeout(soTimeout);
    }

}

然後在spring配置檔案中使用自定義的JedisShardInfo,如下
        <!-- redis sharding -->
	<bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool">
		<constructor-arg index="0" ref="jedisPoolConfig" />
		<constructor-arg index="1">
			<list>
				<bean name="redis1" class="com.my.cache.MyJedisShardInfo">
					<constructor-arg index="0" value="${redis.slaver1.host}" />
					<constructor-arg index="1" value="${redis.client.connectionTimeout}" />
					<constructor-arg index="2" value="${redis.client.soTimeout}" />
				</bean>
				<bean name="redis2" class="com.my.cache.MyJedisShardInfo">
					<constructor-arg index="0" value="${redis.slaver2.host}" />
					<constructor-arg index="1" value="${redis.client.connectionTimeout}" />
                                        <constructor-arg index="2" value="${redis.client.soTimeout}" />
				</bean>
			</list>
		</constructor-arg>
	</bean>
	<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
		<property name="maxTotal" value="${redis.pool.maxTotal}" />
		<property name="maxIdle" value="${redis.pool.maxIdle}" />
		<property name="timeBetweenEvictionRunsMillis" value="${redis.pool.timeBetweenEvictionRunsMillis}" />
		<property name="minEvictableIdleTimeMillis" value="${redis.pool.minEvictableIdleTimeMillis}" />
		<property name="softMinEvictableIdleTimeMillis" value="${redis.pool.softMinEvictableIdleTimeMillis}" />
		<property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}" />
		<property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />
		<property name="testWhileIdle" value="${redis.pool.testWhileIdle}" />
		<property name="testOnReturn" value="${redis.pool.testOnReturn}" />
		<property name="blockWhenExhausted" value="${redis.pool.blockWhenExhausted}" />
	</bean>

properties檔案中配置如下
#redis cluster
#Scheme://username:[email protected]:PORT/dbindex 
redis.slaver1.host=http://10.10.10.134:6379/0
redis.slaver2.host=http://10.10.10.134:6380/0
redis.client.connectionTimeout=2000
redis.client.soTimeout=2000

#redis pool
redis.pool.maxTotal=100
redis.pool.maxIdle=30
redis.pool.timeBetweenEvictionRunsMillis=30000
redis.pool.minEvictableIdleTimeMillis=1800000
redis.pool.softMinEvictableIdleTimeMillis=1800000
redis.pool.maxWaitMillis=1500
redis.pool.testOnBorrow=true
redis.pool.testWhileIdle=false
redis.pool.testOnReturn=false
redis.pool.blockWhenExhausted=false

這樣在程式碼中直接使用

    @Resource(name = "shardedJedisPool")
    private ShardedJedisPool pool;

即可使用了。


相關推薦

客戶分片使用ShardedJedisPool設定DB超時時間

在使用jedis(2.7.2)做redis 客戶端Sharding的時候,發現ShardedJedisPool裡沒有設定DB和超時時間的地方,看了JedisShardInfo的原始碼,裡面的構造方法要麼只能設定超時時間,要麼只能設定DB,沒有同時設定這兩個的方法。  pu

客戶連線伺服器配置出錯“連線超時”或者“無監聽程式”解決方法

這兩天在進行Oracle的客戶端配置,伺服器OS為Windows XP 64,客戶端OS為Win7 64,oracle版本為11.2。 先說下伺服器端自己的疑惑,由於自己是新手,很多都不明白是怎麼個回事。 1)關於服務端監聽程式配置時候的SID設定 我在建立資料庫的時候,設定

restlet 客戶發起請求連線超時設定

此客戶端建立 是使用restlet 實現。 需要restlet 的基礎jar包,org.restlet.jar,org.restlet.ext.servlet.jar. 這兩個jar 可以實現基本的rest服務。 客戶端發起請求還需要其他相關jar包。如下 * 需要依賴org.res

網路程式設計之WCF程式設計:WCF服務客戶的建立回撥

1.概念 Windows Communication Foundation(WCF)是由微軟發展的一組資料通訊的應用程式開發介面,可以翻譯為Windows通訊介面。它是.NET框架的一部分,由 .NET Framework 3.0 開始引入。 WCF的終結點有三個要素組成

Socket程式設計服務客戶互相通訊實現簡單的聊天

客戶端兩個執行緒分別記錄讀和寫,服務端兩個執行緒分別記錄讀和寫; 客戶端程式碼: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import

Oracle資料庫字符集客戶字符集不同強制轉化可能會造成不可預期的後果

1. NLS_LANG 引數組成 NLS_LANG引數由以下部分組成: NLS_LANG=<Language>_<Territory>.<Clients Characterset> NLS_LANG各部分含義如下: LANGUAGE指定: -Oracle訊息使用的語言

minanetty多客戶即時通訊基於google protobuf傳輸協議實現

基於Java服務端的即時通訊解決方案,與android 客戶端完美結合,同時支援其他語言的移動應用,物聯網,智慧家居,桌面應用,WEB應用以及後臺系統之間的即時消互動,為你解決了長連線各種訊息事件,斷線重連等繁瑣的處理,使用方便易於整合。此開源版本為基礎功能版本,只有訊息推送

wsdl 檔案生產webservice 客戶(jax-ws) 介面超時設定

1.  首先 把需要呼叫的方法的類(clientToServiceClas)進行如下轉換:       BindingProvider bindingP=(BindingProvider)clientToServiceClass; 2. 設定連線超時時間,使用Bin

關於客戶設計之數據分類存儲 的思考

service his defaults def sqli href 思想 number fault 一、關於數據的分類 在Android 客戶端設計過程中,我將數據分為未知,已知(本地),臨時,三者之間根據需求相互轉化。 未知主要來自用戶輸入和服務端輸入。 已知主

spring mvc通過客戶傳值controller獲取Sort對象

padding {} margin 獲取 use -c 發現 creat 多個 之前客戶端需要根據需求按不同的排序方式查看數據,按照一種約定排序,比如1代表時間升序,2代表時間降序,3,4這種形式,然後後臺根據這些值創建Sort對象。 後來發現完全多此一舉,可以根據特定的方

OpenSSH客戶漏洞:CVE-2016-0777CVE-2016-0778

ddr cdir -h 我們 class all 信息泄漏 提示信息 禁用 CVE-2016-0777可通過構造ssh惡意服務器,有可能泄漏客戶端的內存私鑰 詳細參考: 1. https://www.qualys.com/2016/01/14/cve-2016-0777-c

SCCM客戶ccmcache文件夾清除修改及Installer文件夾大小問題

ccmcache installer關於ccmcache文件夾大小問題:  一大早上班收到郵件告警,提示OA系統C盤空間不足,使用率超過85%  查看C盤文件使用情況,發現ccmcache占用了7.4G的空間  ccmcache是sccm客戶端更新時下載補丁用的緩存文件夾,將臨時補丁、驅動和其他下載的軟件存儲

客戶協議思考對比微信協議

而且 data- 漢字 生產力 時間 string blob 真的 struct 做了長時間的後臺,越來越感覺到客戶端和服務器之間的協議,是個很值得思考的東西。 一是消息的序列化,二是消息的推送,三是要不要支持多點登陸,就是一個賬號同時使用多個客戶端。

PHP獲取客戶IP地址服務器IP地址

客戶端 get sse spa gets static p地址 tip sta ============================================獲取客戶端IP==============================================

C# 不安裝Oracle客戶情況下如何連接到Oracle數據庫

是不是 如何 () 需要 -s 找到 密碼 dex add 簡介:   在我們開發應用場景經常碰到需要連接Oracle數據庫,這也是相當常見的一種情況。一般.Net環境連接Oracle數據庫,可以通過TNS/SQL.NET 配置文件,而 TNS 必須要 Oracle 客戶端

關於HslCommunication組件的雙模式客戶的說明此說明適用於所有的派生類客戶包括三菱西門子歐姆龍modbustcp機器人simplifyNet客戶等等

idt .cn 適合 數據交互 必須 AR tar 安裝 不用 前言 本文主要是答疑文章,針對廣大網友非常頻繁的提問而總結的問題 nuget地址:https://www.nuget.org/packages/HslCommunication/ g

獲取客戶ip訪問網站的次數請求頁面腳本

客戶端ip訪問網站的次數和請求頁面腳本獲取客戶端ip訪問網站的次數和請求頁面 #/bin/bash cd /data/iplog/$1/pv txt=$(ls -l|awk ‘{print $NF}‘|sed ‘1d‘) for n in $txt do ip=$(cat /root/iplist) for

EOS開發基礎之三:使用cleos命令行客戶操作EOS——關於錢包wallet賬戶account

技術 account perm ons vnc HR and limit may 好了,上一節我們已經講了關於wallet的一些基礎操作,基本了解了怎麽去創建一個錢包,怎麽去查看錢包、上鎖和解鎖錢包等,這一節咱們就來開始操作賬戶account吧。 上一節講到了每一個

redis客戶連接最大連接數查詢與設置

指定 col node 網絡 service服務 限制 style nbsp free ##redis客戶端連接數 redis通過監聽一個TCP端口或socket的方式接收來自客戶端的連接, 當與客戶端建立連接後,redis內部會進行如下操作:(1)客戶端socket會

如何在客戶電腦上批量添加刪除從同一打印服務器上安裝的打印機

wmi connect window script 一個 print 共享 rip interact 批量刪除同一打印服務器上的打印機在要刪除的電腦上運行以下命令:wmic printer where "deviceid like ‘%打印服務器的前綴%‘&quo