為什么Redis要比Memcached更火?
前言
為什么現(xiàn)在看Redis要比Memcached更火一些?
線程模型 數(shù)據(jù)結(jié)構(gòu) 淘汰策略 管道與事務(wù) 持久化 高可用 集群化
線程模型
“嚴(yán)格來說,Redis的單線程指的是處理請(qǐng)求的線程,它本身還有其他線程在工作,例如有其他線程用來異步處理耗時(shí)的任務(wù)。
Redis6.0又進(jìn)一步完善了多線程,在接收請(qǐng)求和發(fā)送請(qǐng)求時(shí)使用多線,進(jìn)一步提高了處理性能。
數(shù)據(jù)結(jié)構(gòu)
list:可以方便的構(gòu)建一個(gè)鏈表,或者當(dāng)作隊(duì)列使用 hash:靈活地操作我們需要的字段,進(jìn)行“整存零取”、“零存整取”以及“零存零取” set:構(gòu)建一個(gè)不重復(fù)的集合,并方便地進(jìn)行差集、并集運(yùn)算 zset:構(gòu)建一個(gè)排行榜,或帶有權(quán)重的列表 geo:用于地圖相關(guān)的業(yè)務(wù),標(biāo)識(shí)兩個(gè)地點(diǎn)的坐標(biāo),以及計(jì)算它們的距離 hyperLogLog:使用非常少的內(nèi)存計(jì)算UV
淘汰策略
volatile-lru:從過期key中按LRU機(jī)制淘汰 allkeys-lru:在所有key中按LRU機(jī)制淘汰 volatile-random:在過期key中隨機(jī)淘汰key allkeys-random:在所有key中隨機(jī)淘汰key volatile-ttl:優(yōu)先淘汰最近要過期的key volatile-lfu:在所有key中按LFU機(jī)制淘汰 allkeys-lfu:在過期key中按LFU機(jī)制淘汰
管道與事務(wù)
持久化
RDB:將整個(gè)實(shí)例中的數(shù)據(jù)快照到磁盤上,全量持久化 AOF:把每一個(gè)寫命令持久到磁盤,增量持久化
高可用
集群化
總結(jié)
從以上幾個(gè)方面進(jìn)行對(duì)比分析,總結(jié)如下表。
| # | Memcached | Redis |
|---|---|---|
| 線程模型 | 多線程 | 單線程 |
| 數(shù)據(jù)結(jié)構(gòu) | 僅支持string、value最大1M、過期時(shí)間不能超過30天 | string、list、hash、set、zset、geo、hyperLogLog |
| 淘汰策略 | LRU | LRU、LFU、隨機(jī)等多種策略 |
| 管道與事務(wù) | 不支持 | 支持 |
| 持久化 | 不支持 | 支持 |
| 高可用 | 不支持 | 主從復(fù)制+哨兵 |
| 集群化 | 客戶端一致性哈希算法 | 主從復(fù)制+哨兵+固定哈希槽位 |
鏈接:kaito-kidd.com/2020/06/28/redis-vs-memcached/
作者:Kaito
關(guān)注「開源Linux」加星標(biāo),提升IT技能
評(píng)論
圖片
表情

