日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
ServiceStack.Redis的問(wèn)題與修正

Redis是開(kāi)源、高性能的Key-value存儲(chǔ)引擎。

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括安平網(wǎng)站建設(shè)、安平網(wǎng)站制作、安平網(wǎng)頁(yè)制作以及安平網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,安平網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到安平省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!

最近我們?cè)谝粋€(gè)日訪(fǎng)問(wèn)量約1kw的網(wǎng)站上使用redis替換以前的memcache,成功將CPU從30%下降到15%,效果相當(dāng)顯著。

ServiceStackRedis是***的C#驅(qū)動(dòng)之一。關(guān)于如何使用ServiceStackRedis請(qǐng)參見(jiàn)這里——使用ServiceStackRedis鏈接Redis簡(jiǎn)介

不過(guò)我們?cè)谑褂肧erviceStackRedis的線(xiàn)程池(PooledRedisClientManager)還是碰到了不少問(wèn)題。

1 鏈接數(shù)異常。

一個(gè)webserver會(huì)占用80個(gè)鏈接。當(dāng)15臺(tái)webserver就過(guò)千了,這時(shí)會(huì)出現(xiàn)有些客戶(hù)端鏈接不上的情況。

解決方案:

GetInActiveWriteClient方法中

 
 
 
 
  1. //找下一個(gè)目標(biāo) 
  2. //從當(dāng)前讀寫(xiě)指針的后面開(kāi)始查找,而不是從0開(kāi)始 
  3. var nextIndex = (WritePoolIndex + i) % writeClients.Length; 
  4. 更改為 
  5. var nextIndex = i; 

同時(shí)修改DisposeClient方法中將readClient.Active == false將DisposeConnection一下。線(xiàn)程就能很好的回收了。

效果:

在我們這樣一個(gè)網(wǎng)站下,單臺(tái)webserver大約會(huì)占用10個(gè)~15個(gè)鏈接,比之前的80個(gè)少了不少。

分析:

從代碼上來(lái)看,作者的初衷是為了更快的找到空閑的線(xiàn)程,但是卻認(rèn)所有線(xiàn)程都不間斷的使用,沒(méi)有一個(gè)線(xiàn)程可能空閑。如果站點(diǎn)較小,webserver不太多,不改問(wèn)題也不大。不過(guò)我認(rèn)為用長(zhǎng)鏈接并不劃算,因?yàn)榕credis建立一個(gè)鏈接還是相對(duì)比較“便宜”的。

2 多臺(tái)redis存儲(chǔ)相同的內(nèi)容。

相同的內(nèi)容會(huì)冗余在所有redis中

解決方案

在GetInActiveWriteClient中加入int型參數(shù)來(lái)標(biāo)識(shí)出使用那臺(tái)redis

 
 
 
 
  1. var start = 0; 
  2. var step = 1; 
  3. if (index > -1 && index < ReadWriteHosts.Count) 
  4.   start = index; 
  5.   step = ReadWriteHosts.Count; 
  6. //遍歷讀寫(xiě)池 
  7. //這個(gè)時(shí)候池是鎖定的 
  8. for (var i = start; i < writeClients.Length; i += step) 
  9.   省略 

這樣線(xiàn)程池中就會(huì)按ReadWriteHosts的個(gè)數(shù)來(lái)順序分配。

效果:

在進(jìn)行讀寫(xiě)時(shí)只需要使用key.GetHashCode方法獲得一個(gè)hash值就能準(zhǔn)確分配到其中一臺(tái)redis上。保證所有的redis的數(shù)據(jù)不重復(fù)。


當(dāng)前名稱(chēng):ServiceStack.Redis的問(wèn)題與修正
文章出自:http://www.dlmjj.cn/article/cohosgc.html