当前位置:首页 > 问答 > 正文

缓存新选择,比Redis快不止一点点,效率提升明显的高性能服务

在需要极快数据读写的场景里,出现了一个新的选择,它比我们熟知的Redis在某些方面快很多,效率提升非常明显,这个新选择就是由谷歌公司开发的内存数据缓存系统,叫做“Memcached”,虽然Memcached和Redis都是用来做缓存、提升速度的,但它们在设计思路上有根本的不同,这就导致了性能上的显著差异。

缓存新选择,比Redis快不止一点点,效率提升明显的高性能服务

最核心的区别在于,Memcached追求的是简单和极致的速度,你可以把它想象成一个超级简单、超级快的临时储物柜,它只做一件事,而且要把这件事做到最快:那就是存储和读取简单的“键值对”,什么是“键值对”呢?就像是你去超市存包,你拿一个牌(键),对应一个储物柜(值),你凭牌取包,Memcached就是凭“键”取“值”,它不支持复杂的数据结构,比如列表、集合、有序集合等等,这些Redis都支持,正因为Memcached“头脑简单”,它的内部结构不复杂,所以处理起来就特别快,尤其是在多线程的情况下。

缓存新选择,比Redis快不止一点点,效率提升明显的高性能服务

说到多线程,这是Memcached比Redis快的一个关键点,早期的Memcached是单线程的,但后来发展成了多线程模型,这就像是一个超市原来只有一个服务员负责所有的存包取包,现在变成了有多个服务员同时为顾客服务,大大减少了排队等待的时间,Memcached可以利用服务器上的多个CPU核心,同时处理很多个客户端的请求,这使得它在高并发(也就是很多人同时访问)的场景下,吞吐量(单位时间内处理的请求数量)非常高,而Redis在很长一段时间里,其核心网络模型都是单线程的(虽然新版本也在改进),这意味着它在一个时间点只能处理一个命令,即使有多个CPU核心,它也只用上一个,这在某些情况下会成为瓶颈。

缓存新选择,比Redis快不止一点点,效率提升明显的高性能服务

Memcached在内存管理上也有其独特之处,它使用了一种叫做“Slab Allocation”的机制来管理内存,它不是每次需要存储数据时都临时向操作系统申请一块新内存,用完再释放,这种方式效率低,容易产生内存碎片,Memcached的做法是,事先申请一大块一大块的内存,并把它们分成不同大小的“柜子组”,比如有一组柜子全是小号的,适合放手机钱包;一组是中号的,适合放背包;一组是大号的,适合放行李箱,当你需要存一个数据时,Memcached就根据数据的大小,把它放到最合适尺寸的“柜子”里,这样做的好处是内存分配速度极快,而且有效减少了内存碎片的产生,使得内存利用率更高,系统运行更稳定,这种为缓存场景做的极致优化,也贡献了它的高性能。

在什么情况下,这个更快的Memcached是更好的选择呢?主要是在你的使用场景非常单纯的时候,如果你只是需要缓存一些简单的数据,比如数据库查询的结果、用户的会话信息、网页的片段内容等,这些数据通常就是一个个简单的字符串或对象,不需要进行复杂的操作,那么Memcached的简单高效就能发挥出最大优势,很多大型网站,比如Facebook、Wikipedia、YouTube等,都大规模使用Memcached来缓解数据库的压力,提升网站的响应速度。

Redis之所以同样流行,是因为它提供了丰富的数据类型和强大的功能,如果你不仅需要缓存,还需要对数据进行排序、求交集、发布订阅消息,或者希望数据能够持久化到硬盘上防止重启丢失,那么Redis是更全能的选择,它的速度已经非常快了,只是在纯粹的比较简单的键值存储和高并发读写场景下,Memcached凭借其架构优势,可能会展现出更高的纯性能。

这个“缓存新选择”Memcached并不是一个完全的新鲜事物,但它作为Redis的一个轻量级、高性能的替代方案,在特定的、追求极致速度和简单性的场景下,其效率提升确实非常明显,它就像是一把专门为“快准狠”打造的尖刀,当你只需要完成切割这个动作时,它比一把功能丰富的瑞士军刀可能更加锋利和顺手,选择哪一个,最终取决于你的具体业务需求是什么。