新聞中心
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方法中
- //找下一個(gè)目標(biāo)
- //從當(dāng)前讀寫(xiě)指針的后面開(kāi)始查找,而不是從0開(kāi)始
- var nextIndex = (WritePoolIndex + i) % writeClients.Length;
- 更改為
- 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
- var start = 0;
- var step = 1;
- if (index > -1 && index < ReadWriteHosts.Count)
- {
- start = index;
- step = ReadWriteHosts.Count;
- }
- //遍歷讀寫(xiě)池
- //這個(gè)時(shí)候池是鎖定的
- for (var i = start; i < writeClients.Length; i += step)
- {
- 省略
這樣線(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


咨詢(xún)
建站咨詢(xún)
