主頁(yè) > 知識(shí)庫(kù) > 動(dòng)態(tài)添加Redis密碼認(rèn)證的方法

動(dòng)態(tài)添加Redis密碼認(rèn)證的方法

熱門(mén)標(biāo)簽:百度競(jìng)價(jià)排名 鐵路電話系統(tǒng) 呼叫中心市場(chǎng)需求 服務(wù)外包 網(wǎng)站排名優(yōu)化 AI電銷(xiāo) 地方門(mén)戶網(wǎng)站 Linux服務(wù)器

如果redis已在線上業(yè)務(wù)使用中,但沒(méi)有添加密碼認(rèn)證,那么如何在不影響業(yè)務(wù)服務(wù)的前提下給redis添加密碼認(rèn)證,就是一個(gè)需要仔細(xì)考慮的問(wèn)題。

本文描述一種可行的方案,適用于客戶端使用了jedis連接池,服務(wù)端使用了redis master-slave集群的情況。

1.定制jedis

對(duì)redis返回的錯(cuò)誤的處理,做兩處修改:

忽略 (error) ERR Client sent AUTH, but no password is set。使配置了密碼的jedis可以在沒(méi)有配置密碼redis上使用;

發(fā)生(error) NOAUTH Authentication required時(shí),將當(dāng)前connection置為broken,從而將連接踢出連接池。這樣動(dòng)態(tài)給redis添加上密碼時(shí),jedis會(huì)自動(dòng)重新創(chuàng)建可用連接。

我已經(jīng)對(duì)jedis 2.8.x版本做好了以上修改??梢灾苯酉螺d使用 。如果使用了更高的版本jedis,可以參考我的代碼自行修改;如果使用了更低版本的,建議升級(jí)到2.8.x。

2.在項(xiàng)目代碼中使用定制的jedis

修改maven配置。將原來(lái)的jedis依賴(lài)注釋掉,添加對(duì)本地的定制jedis的依賴(lài):

dependency>
  groupId>redis.clients/groupId>
  artifactId>jedis/artifactId>
  version>2.8.3/version>
  scope>system/scope>
  systemPath>${project.basedir}/../libs/jedis-2.8.3.jar/systemPath> !-- 此處的systemPath是jedis-2.8.3所在的相對(duì)路徑 -->
/dependency>
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.8.1/version>
/dependency>
-->

因?yàn)榘讯ㄖ苆edis通過(guò)本地jar包的形式提供,maven不會(huì)自動(dòng)加載jedis的依賴(lài),所以需額外添加對(duì)commons-pool2的依賴(lài)。

3.如果使用了低版本的jedis

老版本jedis的returnBrokenResource和returnResource這兩個(gè)方法在新版本jedis中已經(jīng)廢棄,如果升級(jí)jedis版本的話,需要替換為close方法。

替換前:

try {  
 // ... 
} catch (JedisException e) {
 // ...  
 pool.returnBrokenResource(jedis);  
}  
finally {  
 pool.returnResource(jedis);  
}

替換后:

try {  
 // ... 
} catch (JedisException e) {  
 // ...  
}  
finally {  
 jedis.close();
}

4.將使用定制jedis的項(xiàng)目代碼上線

此時(shí)redis尚未添加密碼,但定制jedis忽略了“ERR Client sent AUTH, but no password is set”,所以線上運(yùn)行正常。

5.給redis server添加密碼認(rèn)證

動(dòng)態(tài)添加密碼會(huì)導(dǎo)致redis主從同步斷開(kāi),為避免引起全量同步對(duì)業(yè)務(wù)造成較大影響。需要dba先調(diào)大redis master的client-output-buffer-limit和repl-backlog-size參數(shù),再做配置密碼操作。

給redis server添加密碼的同時(shí),觀察業(yè)務(wù)代碼的log,添加完密碼后,log中會(huì)出現(xiàn)數(shù)次如下報(bào)錯(cuò),隨后恢復(fù)正常。報(bào)錯(cuò)次數(shù)是添加密碼時(shí),業(yè)務(wù)服務(wù)器的jedis連接池中與該redis server之間連接數(shù)量。

復(fù)制代碼 代碼如下:

redis.clients.jedis.exceptions.JedisConnectionException: NOAUTH Authentication required.

如果使用了shardedJedis,請(qǐng)逐個(gè)分片進(jìn)行操作,最小化對(duì)業(yè)務(wù)服務(wù)的影響。

6.更換jedis為官方版本

定制jedis就是為了動(dòng)態(tài)添加密碼認(rèn)證。添加完畢后,換回官方j(luò)edis,方便今后升級(jí)。

dependency>
  groupId>redis.clients/groupId>
  artifactId>jedis/artifactId>
  version>2.8.1/version>
/dependency>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 詳解Redis使用認(rèn)證密碼登錄
  • 利用PHP訪問(wèn)帶有密碼的Redis方法示例
  • Linux下Redis設(shè)置密碼及開(kāi)機(jī)自啟動(dòng)
  • redis配置認(rèn)證密碼的方法
  • redis密碼設(shè)置、訪問(wèn)權(quán)限控制等安全設(shè)置
  • Redis 密碼設(shè)置和查看密碼的方法

標(biāo)簽:黃山 銅川 湖南 仙桃 崇左 蘭州 湘潭 衡水

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《動(dòng)態(tài)添加Redis密碼認(rèn)證的方法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266