最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

redis的出身決定

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

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

解決辦法

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

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

jedis常見(jiàn)錯(cuò)誤分析

異常代碼1:

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

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

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

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

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

也就是說(shuō)當(dāng)連接池中沒(méi)有active/idle的連接時(shí),會(huì)等待maxWait時(shí)間,如果等待超時(shí)還沒(méi)有可用連接,則拋出Could not get a resource from the pool異常。所以為避免這樣的錯(cuò)誤,
我們應(yīng)該根據(jù)程序?qū)嶋H情況合理設(shè)置這三個(gè)參數(shù)的值,同時(shí)在我們獲取一個(gè)連接的程序方法中也應(yīng)該合理的處理這個(gè)異常,當(dāng)沒(méi)有連接可用時(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ì)讓人感覺(jué)疑惑,但是本文開(kāi)頭已經(jīng)說(shuō)過(guò)了,在一些特殊情況下,redis出現(xiàn)超時(shí)并不奇怪。jedis在初始化JedisPool時(shí)應(yīng)該根據(jù)實(shí)際情況通過(guò)redis.clients.jedis.JedisPoolConfig合理設(shè)置連接池參數(shù),通過(guò)redisPool構(gòu)造方法,設(shè)置socket讀取輸入InputStream的超時(shí)時(shí)間。

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

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

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

相關(guān)文章

  • Redis快速實(shí)現(xiàn)分布式session的方法詳解

    Redis快速實(shí)現(xiàn)分布式session的方法詳解

    Session是客戶端與服務(wù)器通訊會(huì)話跟蹤技術(shù),服務(wù)器與客戶端保持整個(gè)通訊的會(huì)話基本信息。本文主要介紹了Redis快速實(shí)現(xiàn)分布式session的方法,感興趣的可以學(xué)習(xí)一下
    2022-01-01
  • 詳解Redis 緩存刪除機(jī)制(源碼解析)

    詳解Redis 緩存刪除機(jī)制(源碼解析)

    這篇文章主要介紹了Redis 緩存刪除機(jī)制(源碼解析),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Redis教程(十五):C語(yǔ)言連接操作代碼實(shí)例

    Redis教程(十五):C語(yǔ)言連接操作代碼實(shí)例

    這篇文章主要介紹了Redis教程(十五):C語(yǔ)言連接操作代碼實(shí)例,本篇博客是該系列博客中的最后一篇,在這里將給出基于Redis客戶端組件訪問(wèn)并操作Redis服務(wù)器的代碼示例,需要的朋友可以參考下
    2015-05-05
  • Redis中Redlock算法的具體使用

    Redis中Redlock算法的具體使用

    Redlock是Redis提供的分布式鎖算法,通過(guò)多個(gè)獨(dú)立Redis實(shí)例實(shí)現(xiàn)高可用的分布式鎖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-10-10
  • Redis的持久化方式

    Redis的持久化方式

    Redis提供了兩種主要的持久化方式:RDB和AOF,RDB通過(guò)定時(shí)快照的方式保存數(shù)據(jù)狀態(tài),而AOF記錄每個(gè)寫操作以便于重啟時(shí)重放,兩者可以結(jié)合使用,且在重啟時(shí)AOF文件會(huì)被優(yōu)先用于數(shù)據(jù)恢復(fù),RDB快照具有速度快、節(jié)省磁盤空間的優(yōu)點(diǎn),但可能會(huì)丟失最近的數(shù)據(jù)
    2024-10-10
  • Window下對(duì)Redis進(jìn)行開(kāi)啟與關(guān)閉的操作方法

    Window下對(duì)Redis進(jìn)行開(kāi)啟與關(guān)閉的操作方法

    這篇文章主要介紹了Window下對(duì)Redis進(jìn)行開(kāi)啟與關(guān)閉的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-11-11
  • RediSearch加RedisJSON大于Elasticsearch的搜索存儲(chǔ)引擎

    RediSearch加RedisJSON大于Elasticsearch的搜索存儲(chǔ)引擎

    這篇文章主要為大家介紹了RediSearch加RedisJSON大于Elasticsearch的王炸使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • redis 集群批量操作實(shí)現(xiàn)

    redis 集群批量操作實(shí)現(xiàn)

    這篇文章主要介紹了redis 集群批量操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Redis大量數(shù)據(jù)插入過(guò)程

    Redis大量數(shù)據(jù)插入過(guò)程

    本文介紹Redis處理大數(shù)據(jù)插入的三種高效方法:redis-cli管道模式、Jedis pipelined()方法及RedisTemplate批量保存,旨在減少通信開(kāi)銷并提升吞吐量
    2025-08-08
  • Redis高可用之持久化

    Redis高可用之持久化

    在web服務(wù)器中,高可用是指服務(wù)器可以正常訪問(wèn)的時(shí)間,衡量的標(biāo)準(zhǔn)是在多長(zhǎng)時(shí)間內(nèi)可以提供正常服務(wù)(99.9%、99.99%、99.999%等等),Redis中,實(shí)現(xiàn)高可用的技術(shù)主要包括持久化、主從復(fù)制、哨兵和cluster集群,感興趣的同學(xué)可以閱讀本文
    2023-04-04

最新評(píng)論

若羌县| 德州市| 五台县| 樟树市| 常德市| 鄂托克前旗| 塘沽区| 文昌市| 旌德县| 乌兰察布市| 岫岩| 桦川县| 洛隆县| 明溪县| 温州市| 军事| 营口市| 巴彦淖尔市| 北安市| 浮山县| 乌审旗| 奇台县| 达孜县| 昌吉市| 荣昌县| 雷州市| 牡丹江市| 锡林浩特市| 错那县| 襄樊市| 法库县| 麻阳| 云梦县| 平定县| 靖远县| 延长县| 永丰县| 鄂尔多斯市| 望谟县| 滦平县| 武夷山市|