在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 大數(shù)據(jù)/ Redis 與 Memcache
Redis 數(shù)據(jù)淘汰機(jī)制
積分排行榜
小剖 Memcache
Redis 數(shù)據(jù)結(jié)構(gòu) intset
分布式鎖
從哪里開(kāi)始讀起,怎么讀
Redis 數(shù)據(jù)結(jié)構(gòu) dict
不在浮沙筑高臺(tái)
Redis 集群(上)
Redis 監(jiān)視器
源碼閱讀工具
Redis 日志和斷言
內(nèi)存數(shù)據(jù)管理
Redis 數(shù)據(jù)結(jié)構(gòu)綜述
源碼日志
Web 服務(wù)器存儲(chǔ) session
消息中間件
Redis 與 Lua 腳本
什么樣的源代碼適合閱讀
Redis 數(shù)據(jù)結(jié)構(gòu) sds
Memcached slab 分配策略
訂閱發(fā)布機(jī)制
Redis 是如何提供服務(wù)的
Redis 事務(wù)機(jī)制
Redis 集群(下)
主從復(fù)制
Redis 應(yīng)用
RDB 持久化策略
Redis 數(shù)據(jù)遷移
Redis 事件驅(qū)動(dòng)詳解
初探 Redis
Redis 與 Memcache
AOF 持久化策略
Redis 數(shù)據(jù)結(jié)構(gòu) redisOb
作者簡(jiǎn)介
Redis 數(shù)據(jù)結(jié)構(gòu) ziplist
Redis 數(shù)據(jù)結(jié)構(gòu) skiplist
Redis 哨兵機(jī)制

Redis 與 Memcache

單進(jìn)程單線程與單進(jìn)程多線程

Redis 是單進(jìn)程單線程的工作模式,所有的請(qǐng)求都被排隊(duì)處理處理,因此緩存數(shù)據(jù)沒(méi)有互斥的需求。而 Memcached 是單進(jìn)程多線程的工作模式,請(qǐng)求到達(dá)時(shí),主線程會(huì)將請(qǐng)求分發(fā)給多個(gè)工作線程,因此必須要做數(shù)據(jù)的互斥。

在處理請(qǐng)求的能力上,兩者是不相上下的。理論上在一臺(tái)支持多線程的機(jī)器上,Memecached 的 get 操作的吞吐量會(huì)較 Redis 高。

那到底是多線程還是單線程優(yōu)秀?多線程一般會(huì)增加程序邏輯的復(fù)雜度,需要考慮線程與線程之間的同步與互斥,一定程度上拉低了每個(gè)線程的吞吐量(工作量),更多的時(shí)間是花在了等待互斥鎖上。一般建議在系統(tǒng)設(shè)計(jì)的時(shí)候多考慮系統(tǒng)的橫向擴(kuò)展性。

使用每個(gè)進(jìn)程單個(gè)線程的模式。這里沒(méi)有信條,不是非黑即白,就看什么樣的方法解決什么樣的問(wèn)題了。

豐富與簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)

Redis 有豐富的原生數(shù)據(jù)結(jié)構(gòu),包括字符串,鏈表,集合,有序集合,哈希表,二進(jìn)制數(shù)組等,可見(jiàn) Redis 能適用于更多的場(chǎng)景,可以當(dāng)作一個(gè)數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)庫(kù)。Memcached 在這方面較 Redis 遜色,只能做簡(jiǎn)單的 key/value 存儲(chǔ)。

其他

除了上面所說(shuō),與 Memcached 比較:

  1. Redis 原生支持主從復(fù)制,可以實(shí)現(xiàn)一主多從的場(chǎng)景,提高了可用性
  2. Redis 原生支持 RDB 和 AOF 兩種持久化方式。前者是將內(nèi)存中的數(shù)據(jù)整體落地,后者是將數(shù)據(jù)的更新落地,類(lèi)似于 MySQL 中的 binlog。Memcached 原生并不支持持久化
  3. Redis 支持事務(wù)
  4. Redis 支持鍵值對(duì)的過(guò)期時(shí)間設(shè)置
  5. Redis 3.0 中已經(jīng)開(kāi)始支持 Redis 集群了

對(duì)比下來(lái),Redis 好玩多了。

性能測(cè)試

曾經(jīng)被問(wèn)到 Redis 和 Memcached 哪個(gè)更快?在測(cè)試的時(shí)候,需要保證測(cè)試的客觀環(huán)境是一樣的,這包括測(cè)試機(jī)器,客戶端除了在構(gòu)造協(xié)議的邏輯部分不一樣外,其他都應(yīng)該是保持一致的。

測(cè)試環(huán)境:

ubuntu, Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz 4 核心
memcache 1.4.14
redis 3.1.99

測(cè)試概括了一些結(jié)論:

  1. 隨著 payload 增大,會(huì)越影響讀寫(xiě)性能,尤其是 Redis
  2. Redis,Memcache(worker 線程數(shù)為1),讀寫(xiě)性能不分上下,Redis 更優(yōu)一點(diǎn)
  3. Memcache 的 worker 線程達(dá)到一定個(gè)數(shù),會(huì)導(dǎo)致讀寫(xiě)的性能下降

默認(rèn)情況下,Memcached 默認(rèn)鍵長(zhǎng)設(shè)置為 256B,存儲(chǔ)數(shù)據(jù)長(zhǎng)度限制為 1M??梢酝ㄟ^(guò) Memcached 的 -I 選項(xiàng)調(diào)整默認(rèn) slab 頁(yè)面大小,從而可以調(diào)整存儲(chǔ)數(shù)據(jù)長(zhǎng)度的限制,但 Memcached 官方是不建議這種做法的。

沒(méi)有非黑即白的答案,只有哪個(gè)工具在哪種場(chǎng)景下更為適用。