相比於memcached,redis擁有更多是資料結構,所以支援更多的資料操作,redis允許的value資料結構型別有5種:string(字串)、list(列表)、set(集合)、hash(雜湊)、zset(有序集合)。
redis只支援單核,memcached可以使用多核,所以平均每乙個核上 redis 在儲存小資料時比 memcached 效能更高。但是在大資料儲存上的處理比起memcached,redis還是稍微遜色了點。
redis內部使用的是檔案事件處理器file event handler,這個file event handler是單執行緒的,所以我們說redis是單執行緒模型。
檔案事件處理器的結構包含 4 個部分:
多個 socket 可能會併發產生不同的操作,每個操作對應不同的檔案事件,但是 io 多路復用程式會監聽多個 socket,會將產生事件的 socket 放入佇列中排隊,事件分派器每次從佇列中取出乙個 socket,根據 socket 的事件型別交給對應的事件處理器進行處理。
首先,redis 服務端程序初始化的時候,會將 server socket 的ae_readable
事件與連線應答處理器關聯。
客戶端 socket01 向 redis 程序的 server socket 請求建立連線,此時 server socket 會產生乙個ae_readable
事件,io 多路復用程式監聽到 server socket 產生的事件後,將該 socket 壓入佇列中。檔案事件分派器從佇列中獲取 socket,交給連線應答處理器。連線應答處理器會建立乙個能與客戶端通訊的 socket01,並將該 socket01 的ae_readable
事件與命令請求處理器關聯。
假設此時客戶端傳送了乙個set key value
請求,此時 redis 中的 socket01 會產生ae_readable
事件,io 多路復用程式將 socket01 壓入佇列,此時事件分派器從佇列中獲取到 socket01 產生的ae_readable
事件,由於前面 socket01 的ae_readable
事件已經與命令請求處理器關聯,因此事件分派器將事件交給命令請求處理器來處理。命令請求處理器讀取 socket01 的key value
並在自己記憶體中完成key value
的設定。操作完成後,它會將 socket01 的ae_writable
事件與命令回覆處理器關聯。
如果此時客戶端準備好接收返回結果了,那麼 redis 中的 socket01 會產生乙個ae_writable
事件,同樣壓入佇列中,事件分派器找到相關聯的命令回覆處理器,由命令回覆處理器對 socket01 輸入本次操作的乙個結果,比如ok
,之後解除 socket01 的ae_writable
事件與命令回覆處理器的關聯。
memcached和redis的區別
redis的作者salvatore sanfilippo曾經對這兩種基於記憶體的資料儲存系統進行過比較,總體來看還是比較客觀的,現總結如下 1 效能對比 由於redis只使用單核,而memcached可以使用多核,所以平均每乙個核上redis在儲存小資料時比memcached效能更 高。而在100k...
redis和memcached的區別 ?
redis 和 memcache 都是基於記憶體的資料儲存系統。memcached是高效能分布式記憶體快取服務 redis是乙個開源的key value儲存系統。下面我們來進行來看一下redis和memcached的區別。redis的作者salvatore sanfilippo曾經對這兩種基於記憶體...
memcached和redis在用法上的不同
寫入資料 set方法不同 memcached可以直接寫入單個值或一維陣列 二維陣列資料,redis可以寫單個資料,一維陣列和二維陣列資料需要序列化後再寫入.讀取資料 get方法不同 memcached讀取單個值 一維陣列 二維陣列資料 通過get方法即可讀取 get get array redis讀...