一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Redis - Redis高并發問題的解決方法

Redis高并發問題的解決方法

2019-11-13 14:07wow-zyshun Redis

這篇文章主要介紹了Redis高并發問題的解決辦法,具有很好的參考價值,感興趣的小伙伴們可以參考一下,具體如下:

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

redis為什么會有高并發問題

redis的出身決定

 redis是一種單線程機制的nosql數據庫,基于key-value,數據可持久化落盤。由于單線程所以redis本身并沒有鎖的概念,多個客戶端連接并不存在競爭關系,但是利用jedis等客戶端對redis進行并發訪問時會出現問題。發生連接超時、數據轉換錯誤、阻塞、客戶端關閉連接等問題,這些問題均是由于客戶端連接混亂造成。

同時,單線程的天性決定,高并發對同一個鍵的操作會排隊處理,如果并發量很大,可能造成后來的請求超時。
在遠程訪問redis的時候,因為網絡等原因造成高并發訪問延遲返回的問題。

解決辦法

1.在客戶端將連接進行池化,同時對客戶端讀寫Redis操作采用內部鎖synchronized。

2.服務器角度,利用setnx變向實現鎖機制。這個方法在實際環境中如何使用,本人并不清楚。

jedis常見錯誤分析

異常代碼1:

 

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

 

問題分析:redis.clients.util.Pool.getResource會從JedisPool池中返回一個可用的redis連接,關于JedisPool中可用連接的配置有幾個重要的參數如下:

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

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

3.MaxWait:等待獲取鏈接的超時時間。

也就是說當連接池中沒有active/idle的連接時,會等待maxWait時間,如果等待超時還沒有可用連接,則拋出Could not get a resource from the pool異常。所以為避免這樣的錯誤, 
我們應該根據程序實際情況合理設置這三個參數的值,同時在我們獲取一個連接的程序方法中也應該合理的處理這個異常,當沒有連接可用時,等待一段時間再獲取也許是個比較好的選擇。

異常代碼2:

 

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

 

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

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

第四個參數是time out,單位是毫秒。可以通過合理的設置這個值來規避問題。但是這不能完全解決超時的為題。有些高并發情況下,延時返回時間甚至會達到幾十秒的極端情況。這個問題要通過代碼層面解決redis單線程本身不支持鎖,在對同一個鍵進行并發操作會產生競爭的問題。

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

延伸 · 閱讀

精彩推薦
  • Redisredis實現排行榜功能

    redis實現排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實現排行榜功能,本文就來簡單的介紹一下如何使用,具有一定的參考價值,感興趣的小伙伴們...

    乘月歸5022021-08-05
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎,哨兵和集群都是建立在復制基礎上實現高可用的...

    李留廣10222021-08-09
  • RedisRedis的配置、啟動、操作和關閉方法

    Redis的配置、啟動、操作和關閉方法

    今天小編就為大家分享一篇Redis的配置、啟動、操作和關閉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡5312019-11-14
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具...

    一線碼農5812019-11-18
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    xiaojin21cen10152021-07-27
  • RedisRedis如何實現數據庫讀寫分離詳解

    Redis如何實現數據庫讀寫分離詳解

    Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面這篇文章主要給大家介紹了關于Redis如何實現數據庫讀寫分離的相關資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • RedisRedis 事務知識點相關總結

    Redis 事務知識點相關總結

    這篇文章主要介紹了Redis 事務相關總結,幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • RedisRedis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關于Redis全量復制與部分復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習...

    豆子先生5052019-11-27
主站蜘蛛池模板: 男人天堂网在线 | 亚洲 日韩经典 中文字幕 | 天堂在线免费观看 | 日韩成人小视频 | 激情视频图片小说qvdo | 欧美人在线一区二区三区 | 男人的天堂久久 | 亚洲精美视频 | 九色PORNY真实丨国产免费 | 色多多在线视频 | 成人欧美一区二区三区黑人 | 日本人交换乱理伦片 | 成年人黄视频在线观看 | 人皮高跟鞋在线观看 | 欧美精品一区二区在线观看播放 | 精品视频手机在线观看免费 | 久久人妻无码毛片A片麻豆 久久热这里只有 精品 | 成人综合婷婷国产精品久久免费 | 热色综合 | 国产亚洲欧美在线中文bt天堂网 | 999导航| 出水小说| 亚洲精品视频在线免费 | 色综合网亚洲精品久久 | 国产成人综合一区精品 | 午夜国产精品影院在线观看 | 欧美另类变态 | 九九热这里只有精品视频免费 | 久久国产乱子伦精品免费不卡 | 2021国产精品露脸在线 | 免费港剧在线观看港剧 | porno日本大学生高清 | 99久视频 | 乳环调教 | 亚洲精品97福利在线 | 亚洲AV蜜桃永久无码精品无码网 | 欧美成人中文字幕 | 国产精品乱码高清在线观看 | 欧美xingai | 国内精品久久久久久久久久久久 | 久久久大香菇 |