日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redisb并发访问慢出现的问题

發(fā)布時間:2024/7/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redisb并发访问慢出现的问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近項(xiàng)目一上線,就問題頗多,本地測試,ok,上線后,大用戶量的時候,頂不住。用了一個禮拜的時間發(fā)現(xiàn)的問題,總結(jié)下來。

項(xiàng)目是netty4.0,reids2.8,nginx等框架。目前是4臺proxy服務(wù)器,一臺核心服務(wù)器,reids只部署在核心服務(wù)器上,各代理服務(wù)器共享redis數(shù)據(jù)。

當(dāng)大量用戶訪問自己距離較近的proxy服務(wù)器時,proxy同時請求核心服務(wù)器,并發(fā)量到1w時,經(jīng)常請求卡死,網(wǎng)頁請求不回來,開始從netty的http處理并發(fā)下手,各種netty的官網(wǎng),netty的優(yōu)化,和配置,都修改了,還是沒有起作用,后來屏蔽redis后,發(fā)現(xiàn)netty處理20w并發(fā)一點(diǎn)問題沒有,問題確定在redis上。

然后,著手redis的優(yōu)化,redis的池的優(yōu)化,配置,沒有作用,后臺發(fā)現(xiàn),本地訪問redis并發(fā)1w,很快,但是,訪問其他服務(wù)器的redis特別卡,發(fā)現(xiàn)原因,就在于,跨服務(wù)器訪問redis,可能由于網(wǎng)絡(luò),跨服務(wù)器,導(dǎo)致的并發(fā)請求redis,回不來的問題,那么,最后,舍棄了proxy服務(wù)器遠(yuǎn)程調(diào)用核心服務(wù)器reids的方案,nginx改為所有心跳請求,跨過proxy服務(wù)器,直接走核心服務(wù)器,這樣相當(dāng)于本地訪問redis,最后擔(dān)心核心服務(wù)器并發(fā)能力,暫時,開啟了2個服務(wù),處理所有并發(fā),reids問題得到解決。

總結(jié):就是reids本身性能沒有問題,處理并發(fā)能力ok,就是跨服務(wù)器遠(yuǎn)程訪問其他服務(wù)器reids時,并發(fā)大了,網(wǎng)絡(luò)延遲等,會出現(xiàn)取reids卡死。

?

更高效地提高redis client多線程操作的并發(fā)吞吐設(shè)計(jì)

Redis???2015-05-10 09:51:44 發(fā)布
您的評價: ????? 0.0?
收藏?????0收藏

? ? ? ? Redis是一個非常高效的基于內(nèi)存的NOSQL數(shù)據(jù)庫,它提供非常高效的數(shù)據(jù)讀寫效能.在實(shí)際應(yīng)用中往往是帶寬和CLIENT庫讀寫損耗過高導(dǎo)致無法更好地發(fā)揮出Redis更出色的能力.下面結(jié)合一些redis本身的特性和一些client操作上的改變來提高整個redis操作的效能.

????? ? 上圖是反映平常操作redis的情況,每個線程都獨(dú)立的發(fā)起相應(yīng)連接對redis的網(wǎng)絡(luò)讀寫.雖然我們可以通過批操作的方式來把當(dāng)前多個操作合并成一個,但這種方式只能針對當(dāng)單線程,而多線程相互合并則設(shè)計(jì)上很少關(guān)注.從redis的協(xié)議來說其實(shí)并沒有限制,只是在client庫的設(shè)計(jì)一般沒有考慮進(jìn)去.

????? ? 如果在多線程操作REDIS的同時如果能夠合并網(wǎng)絡(luò)操作,那意味著可以減少操作網(wǎng)絡(luò)讀寫的情況把處理能力提升到最大化.這樣Client總體的性能都會有所提升,而REDIS也因表層的網(wǎng)絡(luò)讀取減少而達(dá)到更好的利用率.

????? ? 以上是設(shè)計(jì)圖,原理并不復(fù)雜,其實(shí)就是把每個請求的操作放到一個隊(duì)列中,后面開啟一個線程來把前面的指令進(jìn)行一個合并操操作.一個線程在高并發(fā)下可以無法更快速地合并起來,可以根據(jù)需要進(jìn)行合理的操作線程應(yīng)用.

????? ? 這種設(shè)計(jì)的效果是否真的比較理想呢,以下是一個簡單的測試

public void AnycSet(){CodeTimer.Time("beetle.redis asynset", () =>{Parallel.For(0, Count, x =>{ProtobufKey key = x.ToString();key.AsynSet(new User() { UserId = x, NickName = "sdffffffffffffffffffffffffffffffffffffffffsdffffffffffffffffffffffffffffffffffffffffbeetlesdffffffffffffffffffffffffffffffffffffffffsdffffffffffffffffffffffffffffffffffffffff" + x });});});}public void Set(){CodeTimer.Time("beetle.redis set", () =>{Parallel.For(0, Count, x =>{ProtobufKey key = x.ToString();key.Set(new User() { UserId = x, NickName = "sdffffffffffffffffffffffffffffffffffffffffsdffffffffffffffffffffffffffffffffffffffffbeetlesdffffffffffffffffffffffffffffffffffffffffsdffffffffffffffffffffffffffffffffffffffff" + x });});});}

????? ? 測試結(jié)果如下

? ? ? ??

????????以上是10W次的操作測試結(jié)果,由于redis在本機(jī)所以交互非常可觀.

????? ? 雖然在多線程高并發(fā)下這樣的設(shè)計(jì)可以把吞吐能力和效能有一個非常不錯的效果,但其也存在缺陷因?yàn)槊看尾僮鞫冀?jīng)過不同線程的調(diào)處理,如果并發(fā)線程不多操作密集度不高.那效果并不理想;因?yàn)榫W(wǎng)絡(luò)操作密集度不高,可得到并合的數(shù)量不多,這方面的損耗有可能低于操作跨線程調(diào)度所帶來的損耗.

轉(zhuǎn)載于:https://www.cnblogs.com/panxuejun/p/6042591.html

總結(jié)

以上是生活随笔為你收集整理的redisb并发访问慢出现的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。