选redis仍是memcache

memcache和redis是互联网分层架构中,最常用的KV缓存。不少同学在选型的时分会纠结,到底是挑选memcache仍是redis
 
尽管redis比memcache更晚出来,且功用的确也更丰富,但关于一个技能人,了解“所以然”恐怕比“挑选谁”更重要一些。
 

什么时分倾向于挑选redis?

事务需求挑选技能选型,当事务有这样一些特征的时分,挑选redis会愈加适合。
 

杂乱数据结构

value是哈希,列表,集结,有序集结这类杂乱的数据结构时,会挑选redis,因为mc无法满意这些需求。
最典型的场景,用户订单列表,用户音讯,帖子谈论列表等。
 

耐久化

mc无法满意耐久化的需求,只得挑选redis。
可是,这儿要提示的是,真的运用对了redis的耐久化功用么?
 
千万不要把redis当作数据库用:
(1)redis的守时快照不能确保数据不丢掉
(2)redis的AOF会下降功率,而且不能支撑太大的数据量

不要希望redis做固化存储会比mysql做得好,不同的东西做各自拿手的作业,把redis当作数据库用,这样的规划多半是过失的。
 

缓存场景,翻开固化功用,有什么好坏?

假定仅仅缓存场景,数据存放在数据库,缓存在redis,此刻假定翻开固化功用: 

利益是,redis挂了再重启,内存里可以快速康复热数据,不会瞬时将压力压到数据库上,没有一个cache预热的进程。

缺陷是,在redis挂了的进程中,假定数据库中有数据的修改,或许会引起redis重启后,数据库与redis的数据不一致。
 
因而,只读场景,或许容许一些不一致的事务场景,可以查验翻开redis的固化功用。
 

天然高可用

redis天然支撑集群功用,能轻松结束主动复制,读写别离。
redis官方也供给了sentinel集群处理东西,可以结束主从服务监控,缺陷主动搬运,这一切,关于客户端都是通明的,无需程序改动,也无需人工介入。
而memcache,要想要结束高可用,有必要进行二次开发,例如客户端的双读双写,或许服务端的集群同步
可是,这儿要提示的是,大部分事务场景,缓存真的需求高可用么?
(1)缓存场景,许多时分,是容许cache miss
(2)缓存挂了,许多时分能经过DB读取数据

所以,需求仔细分析事务场景,高可用,是否真的是对缓存的首要需求?
 

存储的内容比较大

memcache的value存储,最大为1M,假定存储的value很大,只能运用redis。
 

什么时分倾向于memcache?

纯KV,数据量非常大,并发量非常大的事务,运用memcache或许更适合。
这要从mc与redis的底层结束机制差异说起。

内存分配

memcache运用预分配内存池的方法处理内存,可以省去内存分配时刻。
redis则是暂时央求空间,或许会引起碎片。
从这一点上,mc会更快一些。
 

虚拟内存运用

memcache把一切的数据存储在物理内存里。
redis有自己的VM机制,理论上可以存储比物理内存更多的数据,当数据过量时,会引发swap,把冷数据刷到磁盘上。
从这一点上,数据量大时,mc会更快一些。
 

网络模型

memcache运用非堵塞IO复用模型,redis也是运用非堵塞IO复用模型。
但因为redis还供给一些非KV存储之外的排序,聚合功用,在实施这些功用时,杂乱的CPU核算,会堵塞整个IO调度。
从这一点上,因为redis供给的功用较多,mc会更快一些。
 

线程模型

memcache运用多线程,主线程监听,worker子线程承受央求,实施读写,这样的一个进程中,或许存在锁抵触。
redis运用单线程,虽无锁抵触,但难以使用多核的特性前进全体吞吐量。
从这一点上,mc会快一些。
 
毕竟总结一下:
不管是mc和redis,服务端集群没有天然支撑水平扩展,需求在客户端进行分片,这其实对调用方并不友善。假定能服务端集群可以支撑水平扩展,会更完美一些。

你知道什么装备的云产品最适合你吗?
你知道如何故最低价购买最高值的云产品吗?
重视山东云管家ygjdata,免费带走上云助力+专属云上运维
山东云管家是阿里云北方大区一级经销商,服务过的各行业客户上万+,值得信任!