选redis还是memcache

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: memcache和redis是互联网分层架构中,最常用的KV缓存。不少同学在选型的时候会纠结,到底是选择memcache还是redis。 虽然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,免费带走上云助力+专属云上运维
山东云管家是阿里云北方大区一级经销商,服务过的各行业客户上万+,值得信赖!

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6月前
|
存储 缓存 NoSQL
【分布式】Redis与Memcache的对比分析
【1月更文挑战第25天】【分布式】Redis与Memcache的对比分析
|
6月前
|
NoSQL Redis 数据库
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?-- Memcache + Redis 多线程
【5月更文挑战第20天】Redis采用单线程模式以避免上下文切换和资源竞争,简化调试,且其性能瓶颈在于网络IO和内存,而非多线程。相比之下,Memcache使用多线程能更好地利用多核CPU,但伴随上下文切换和锁管理的开销。尽管Redis单线程性能不俗,6.0版本引入多线程以提升高并发下的IO处理能力。启用多线程后,Redis结合Reactor和epoll实现并发处理,提高系统性能。
73 0
|
存储 NoSQL Redis
redis与memcache比较
redis与memcache比较
101 0
|
存储 缓存 NoSQL
Redis,Memcache,MongoDb 优点和区别
Redis相比memcached有哪些优势?
|
存储 缓存 NoSQL
Memcache与Redis的区别都有哪些
前面的文章两篇文章聊聊Redis是如何做到“持久化”和[ 分布式缓存中间件Redis入门](分布式缓存中间件Redis入门 (qq.com))主要介绍了分布式缓存系统——redis。作为缓存系统的还有Memcached,今天就来说说这两个缓存系统有什么区别。
136 0
|
NoSQL Redis Memcache
redis和memcache区别
redis和memcache区别
124 0
redis和memcache区别
|
NoSQL Redis Memcache
选redis还是memcache,源码怎么说?
memcache和redis是互联网分层架构中,最常用的KV缓存。不少同学在选型的时候会纠结,到底是选择memcache还是redis。
1018 0
|
存储 SQL NoSQL
九爷带你了解 带你了解 Nosql Redis ttserver Flare memcache比较
Nosql Redis ttserver Flare memcache比较 随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。
1558 0
|
存储 SQL NoSQL
九爷带你了解 带你了解 Nosql Redis ttserver Flare memcache比较
Nosql Redis ttserver Flare memcache比较 随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。
1638 0
|
存储 NoSQL 数据库
memcache和redis区别
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/80612867 我这段时间在用Redis,感觉挺方便的,但比较疑惑在选择内存数据库的时候到底什么时候选择redis,什么时候选择memcache,然后就查到下面对应的资料,是来自redis作者的说法(stackoverflow上面)。
2119 0