Memcached和Redis應用場景的考慮

2021-08-29 07:30:39 字數 1502 閱讀 9264

用的是redis做cache為什麼沒有用memcached,這裡有什麼考究嗎?

另外,為什麼redis做快取卻又將資料放到mongodb去了?

1、通訊方式

memcached和redis都支援udp協議。而且當使用者程序和memcached和redis在同一機器時,還可以使用unix域套接字通訊

1、事件模型

兩者都是多執行緒,但redis除主線程loop其他執行緒負責後台儲存相關的工作,而memcached是多執行緒的,使用master-worker的方式,主線程監聽埠,建立連線,然後順序分配給各個工作執行緒。每乙個從執行緒都有乙個event loop,它們服務不同的客戶端。master執行緒和worker執行緒之間使用管道通訊,每乙個工作執行緒都會建立乙個管道,然後儲存寫端和讀端,並且將讀端加入event loop,監聽可讀事件

2、記憶體分配

memcached是有自己得記憶體池的,即預先分配一大塊記憶體,然後接下來分配記憶體就從記憶體池中分配,這樣可以減少記憶體分配的次數,提高效率;redis支援使用tcmalloc來替換glibc的malloc,前者是google的產品,比glibc的malloc快

3、資料型別

memcached只支援key-value,即只能乙個key對於乙個value;redis支援string, list, set,sorted set,hash table 5種資料結構。

單執行緒:

20000次寫入資料,memcached寫入時間約為9000,msredis寫入時間約為13000ms

20000次讀取資料,memcached讀取時間約為7000,msredis讀取時間約為6000ms

多執行緒:

redis每個執行緒寫入1000次資料,執行總用時約為5000ms;memcached每個執行緒寫入1000次資料,執行總用時約為10000ms

redis每個執行緒讀取1000次資料, 執行總用時約為2000ms ;memcached每個執行緒讀取1000次資料,執行總用時約為8000ms

在記憶體上,memcached的利用率比redis高,這和它的記憶體管理方式有很大關係不過整體不影響。

效能不是決策性瓶頸,redis比memcached的功能多很多。 不過memcached更專注於儲存key-value資料,而redis提供更豐富的資料結構及其他的一些功能,從使用上講redis支援更容易滿足應用場景。

在用專案bbc的選擇

選擇redis主要是因為redis的口碑,redis資料型別豐富、還能動態擴容、dump到硬碟等等功能,而且支援的挺好的,就選擇了

因為儲存redis的速度比較快,所以角色資料的儲存週期是這樣,redis 1分鐘存一次玩家資料,mongodb 5分鐘存一次,這樣可以保證在伺服器宕機的情況下,redis可以保證玩家只回檔1分鐘。另外redis主要是用來儲存一些分布式伺服器要取的資料,比如戰鬥等級、角色名稱、一些業務資料,這些業務資料用得比較多,那個保證玩家回檔的作用只是其中乙個。

memcached和redis的區別

redis的作者salvatore sanfilippo曾經對這兩種基於記憶體的資料儲存系統進行過比較,總體來看還是比較客觀的,現總結如下 1 效能對比 由於redis只使用單核,而memcached可以使用多核,所以平均每乙個核上redis在儲存小資料時比memcached效能更 高。而在100k...

redis和memcached的區別 ?

redis 和 memcache 都是基於記憶體的資料儲存系統。memcached是高效能分布式記憶體快取服務 redis是乙個開源的key value儲存系統。下面我們來進行來看一下redis和memcached的區別。redis的作者salvatore sanfilippo曾經對這兩種基於記憶體...

redis和memcached的區別

相比於memcached,redis擁有更多是資料結構,所以支援更多的資料操作,redis允許的value資料結構型別有5種 string 字串 list 列表 set 集合 hash 雜湊 zset 有序集合 redis只支援單核,memcached可以使用多核,所以平均每乙個核上 redis 在...