西安住房和城鄉(xiāng)建設局網(wǎng)站如何讓自己的網(wǎng)站快速被百度收錄
分區(qū)
Redis是單線程的,如何提高多核CPU的利用率?
可以在同一個服務器部署多個Redis的實例,并把他們當作不同的服務器來使用,在某些時候,無論如何一個服務器是不夠的, 所以,如果你想使用多個CPU,你可以考慮一下分片(shard)。
為什么要做Redis分區(qū)?
分區(qū)可以讓Redis管理更大的內(nèi)存,Redis將可以使用所有機器的內(nèi)存。如果沒有分區(qū),你最多只能使用一臺機器的內(nèi)存。分區(qū)使Redis的計算能力通過簡單地增加計算機得到成倍提升,Redis的網(wǎng)絡帶寬也會隨著計算機和網(wǎng)卡的增加而成倍增長。
你知道有哪些Redis分區(qū)實現(xiàn)方案?
客戶端分區(qū)就是在客戶端就已經(jīng)決定數(shù)據(jù)會被存儲到哪個redis節(jié)點或者從哪個redis節(jié)點讀取。大多數(shù)客戶端已經(jīng)實現(xiàn)了客戶端分區(qū)。
代理分區(qū) 意味著客戶端將請求發(fā)送給代理,然后代理決定去哪個節(jié)點寫數(shù)據(jù)或者讀數(shù)據(jù)。代理根據(jù)分區(qū)規(guī)則決定請求哪些Redis實例,然后根據(jù)Redis的響應結果返回給客戶端。redis和memcached的一種代理實現(xiàn)就是Twemproxy
查詢路由(Query routing) 的意思是客戶端隨機地請求任意一個redis實例,然后由Redis將請求轉(zhuǎn)發(fā)給正確的Redis節(jié)點。Redis Cluster實現(xiàn)了一種混合形式的查詢路由,但并不是直接將請求從一個redis節(jié)點轉(zhuǎn)發(fā)到另一個redis節(jié)點,而是在客戶端的幫助下直接redirected到正確的redis節(jié)點。
Redis分區(qū)有什么缺點?
涉及多個key的操作通常不會被支持。例如你不能對兩個集合求交集,因為他們可能被存儲到不同的Redis實例(實際上這種情況也有辦法,但是不能直接使用交集指令)。
同時操作多個key,則不能使用Redis事務.
分區(qū)使用的粒度是key,不能使用一個非常長的排序key存儲一個數(shù)據(jù)集(The partitioning granularity is the key, so it is not possible to shard a dataset with a single huge key like a very big sorted set)
當使用分區(qū)的時候,數(shù)據(jù)處理會非常復雜,例如為了備份你必須從不同的Redis實例和主機同時收集RDB / AOF文件。
分區(qū)時動態(tài)擴容或縮容可能非常復雜。Redis集群在運行時增加或者刪除Redis節(jié)點,能做到最大程度對用戶透明地數(shù)據(jù)再平衡,但其他一些客戶端分區(qū)或者代理分區(qū)方法則不支持這種特性。然而,有一種預分片的技術也可以較好的解決這個問題。