欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis高并發(fā)問題的解決方法

 更新時(shí)間:2018年05月07日 12:45:05   作者:wow-zyshun  
這篇文章主要介紹了Redis高并發(fā)問題的解決辦法,具有很好的參考價(jià)值,感興趣的小伙伴們可以參考一下,具體如下:

本文講述了Redis高并發(fā)問題的解決辦法。分享給大家供大家參考,具體如下:

redis為什么會(huì)有高并發(fā)問題

redis的出身決定

 redis是一種單線程機(jī)制的nosql數(shù)據(jù)庫,基于key-value,數(shù)據(jù)可持久化落盤。由于單線程所以redis本身并沒有鎖的概念,多個(gè)客戶端連接并不存在競爭關(guān)系,但是利用jedis等客戶端對(duì)redis進(jìn)行并發(fā)訪問時(shí)會(huì)出現(xiàn)問題。發(fā)生連接超時(shí)、數(shù)據(jù)轉(zhuǎn)換錯(cuò)誤、阻塞、客戶端關(guān)閉連接等問題,這些問題均是由于客戶端連接混亂造成。

同時(shí),單線程的天性決定,高并發(fā)對(duì)同一個(gè)鍵的操作會(huì)排隊(duì)處理,如果并發(fā)量很大,可能造成后來的請(qǐng)求超時(shí)。
在遠(yuǎn)程訪問redis的時(shí)候,因?yàn)榫W(wǎng)絡(luò)等原因造成高并發(fā)訪問延遲返回的問題。

解決辦法

1.在客戶端將連接進(jìn)行池化,同時(shí)對(duì)客戶端讀寫Redis操作采用內(nèi)部鎖synchronized。

2.服務(wù)器角度,利用setnx變向?qū)崿F(xiàn)鎖機(jī)制。這個(gè)方法在實(shí)際環(huán)境中如何使用,本人并不清楚。

jedis常見錯(cuò)誤分析

異常代碼1:

復(fù)制代碼 代碼如下:
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool

問題分析:redis.clients.util.Pool.getResource會(huì)從JedisPool池中返回一個(gè)可用的redis連接,關(guān)于JedisPool中可用連接的配置有幾個(gè)重要的參數(shù)如下:

1.MaxActive:可用連接實(shí)例的最大數(shù)目,為負(fù)數(shù)的時(shí)候沒有限制。

2.MaxIdle:空閑連接實(shí)例的最大數(shù)目,為負(fù)值時(shí)沒有限制。

3.MaxWait:等待獲取鏈接的超時(shí)時(shí)間。

也就是說當(dāng)連接池中沒有active/idle的連接時(shí),會(huì)等待maxWait時(shí)間,如果等待超時(shí)還沒有可用連接,則拋出Could not get a resource from the pool異常。所以為避免這樣的錯(cuò)誤,
我們應(yīng)該根據(jù)程序?qū)嶋H情況合理設(shè)置這三個(gè)參數(shù)的值,同時(shí)在我們獲取一個(gè)連接的程序方法中也應(yīng)該合理的處理這個(gè)異常,當(dāng)沒有連接可用時(shí),等待一段時(shí)間再獲取也許是個(gè)比較好的選擇。

異常代碼2:

復(fù)制代碼 代碼如下:
redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out

遇到這個(gè)異常,可能會(huì)比較疑惑,redis是對(duì)內(nèi)存的操作,速度一個(gè)在毫秒級(jí)別,在對(duì)redis操作出現(xiàn)秒級(jí)別的操作時(shí)會(huì)讓人感覺疑惑,但是本文開頭已經(jīng)說過了,在一些特殊情況下,redis出現(xiàn)超時(shí)并不奇怪。jedis在初始化JedisPool時(shí)應(yīng)該根據(jù)實(shí)際情況通過redis.clients.jedis.JedisPoolConfig合理設(shè)置連接池參數(shù),通過redisPool構(gòu)造方法,設(shè)置socket讀取輸入InputStream的超時(shí)時(shí)間。

`pool = new JedisPool(config, host, port, 100000)`;

第四個(gè)參數(shù)是time out,單位是毫秒??梢酝ㄟ^合理的設(shè)置這個(gè)值來規(guī)避問題。但是這不能完全解決超時(shí)的為題。有些高并發(fā)情況下,延時(shí)返回時(shí)間甚至?xí)_(dá)到幾十秒的極端情況。這個(gè)問題要通過代碼層面解決redis單線程本身不支持鎖,在對(duì)同一個(gè)鍵進(jìn)行并發(fā)操作會(huì)產(chǎn)生競爭的問題。

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • K8S部署Redis(單機(jī)、集群)的超詳細(xì)步驟

    K8S部署Redis(單機(jī)、集群)的超詳細(xì)步驟

    redis是一款基于BSD協(xié)議,開源的非關(guān)系型數(shù)據(jù)庫(nosql數(shù)據(jù)庫)這篇文章主要給大家介紹了關(guān)于K8S部署Redis(單機(jī)、集群)的超詳細(xì)步驟,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • Redis反序列化失敗的解決方法

    Redis反序列化失敗的解決方法

    在使用Redis緩存數(shù)據(jù)的過程中,有時(shí)會(huì)遇到反序列化失敗的問題,本文主要介紹了Redis反序列化失敗的解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • 一文詳解Redis中的持久化

    一文詳解Redis中的持久化

    這篇文章主要介紹了一文詳解Redis中的持久化,持久化功能有效地避免因進(jìn)程退出造成的數(shù)據(jù)丟失問題,當(dāng)下次重啟時(shí)利用之前持久化的文件即可實(shí)現(xiàn)數(shù)據(jù)恢復(fù)
    2022-09-09
  • 你了解Redis事務(wù)嗎

    你了解Redis事務(wù)嗎

    說到事務(wù),大家會(huì)立刻想到Mysql的事務(wù),所謂的事務(wù)就是對(duì)數(shù)據(jù)進(jìn)行一系列的操作,要么都執(zhí)行成功,要么都執(zhí)行失敗,下面就介紹一下Redis如何實(shí)現(xiàn)事務(wù),感興趣的可以了解一下
    2022-08-08
  • 利用redisson快速實(shí)現(xiàn)自定義限流注解(接口防刷)

    利用redisson快速實(shí)現(xiàn)自定義限流注解(接口防刷)

    利用redis的有序集合即Sorted?Set數(shù)據(jù)結(jié)構(gòu),構(gòu)造一個(gè)令牌桶來實(shí)施限流,而redisson已經(jīng)幫我們封裝成了RRateLimiter,通過redisson,即可快速實(shí)現(xiàn)我們的目標(biāo),這篇文章主要介紹了利用redisson快速實(shí)現(xiàn)自定義限流注解,需要的朋友可以參考下
    2024-07-07
  • Redis的5種數(shù)據(jù)類型與常用命令講解

    Redis的5種數(shù)據(jù)類型與常用命令講解

    今天小編就為大家分享一篇關(guān)于Redis的5種數(shù)據(jù)類型與常用命令講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 利用redis實(shí)現(xiàn)排行榜的小秘訣

    利用redis實(shí)現(xiàn)排行榜的小秘訣

    這篇文章主要給大家介紹了關(guān)于如何利用redis實(shí)現(xiàn)排行榜的小秘訣,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Redis實(shí)現(xiàn)數(shù)據(jù)的交集、并集、補(bǔ)集的示例

    Redis實(shí)現(xiàn)數(shù)據(jù)的交集、并集、補(bǔ)集的示例

    本文主要介紹了Redis實(shí)現(xiàn)數(shù)據(jù)的交集、并集、補(bǔ)集的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 利用yum安裝Redis的方法詳解

    利用yum安裝Redis的方法詳解

    Redis是一個(gè)開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。從2010年3月15日起,Redis的開發(fā)工作由VMware主持。這篇文章主要介紹的是利用yum安裝Redis的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧
    2016-11-11
  • Redis出現(xiàn)(error)NOAUTH?Authentication?required.報(bào)錯(cuò)的解決辦法(秒懂!)

    Redis出現(xiàn)(error)NOAUTH?Authentication?required.報(bào)錯(cuò)的解決辦法(秒懂!)

    這篇文章主要給大家介紹了關(guān)于Redis出現(xiàn)(error)NOAUTH?Authentication?required.報(bào)錯(cuò)的解決辦法,對(duì)于 這個(gè)錯(cuò)誤這通常是因?yàn)镽edis服務(wù)器需要密碼進(jìn)行身份驗(yàn)證,但客戶端沒有提供正確的身份驗(yàn)證信息導(dǎo)致的,需要的朋友可以參考下
    2024-03-03

最新評(píng)論