问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Memcached和Redis有什么区别?WordPress缓存选哪个好?

创作时间:
作者:
@小白创作中心

Memcached和Redis有什么区别?WordPress缓存选哪个好?

引用
1
来源
1.
https://blog.wpjam.com/m/wordpress-memcached-vs-redis/

前面介绍了使用Memcached内存缓存来实现WordPress站点秒开,但是很多人问到了Redis,就是做缓存Redis和Memcached有什么区别,用哪个更好?今天就给大家做一个简单介绍。

Memcached和Redis有什么区别

首先从模型上看,Memcached是一个分布式内存缓存系统,专注于简单的键-值对存储,设计简单易用,它不支持复杂数据类型,而Redis是一个内存数据结构存储,支持更多的数据结构(如列表、集合、排序集合、哈希等),不仅仅是简单的键-值对。

所以Memcached是为简单的读写操作优化的,适合需要快速缓存大量数据的场景,而Redis提供了丰富的数据操作功能,对复杂数据操作优化良好,同时也提供了高性能的读写速度,并且Redis支持数据持久化,可以将内存数据保存到磁盘,Memcached没有持久性功能,所有数据都存储在内存中,服务器重启时数据就会丢失,作为缓存这个问题不大。

此外,它们还有一点比较大的区别,就是Memcached支持多线程,所以支持高并发访问,而Redis一般使用单线程模型,虽然通过I/O多路复用技术提供高吞吐量,这样就比较在秒杀等场景下使用,不需要考虑并发的问题,因为单线程。

简单做个功能特性对比表格:

特性
Memcached
Redis
数据结构
仅支持键值对(String)
支持String、List、Hash、Set等
持久化
不支持
支持RDB快照和AOF日志
线程模型
多线程(高并发读优)
单线程(避免锁竞争,顺序执行)
内存管理
预分配固定内存,LRU淘汰
支持内存淘汰策略,可配置虚拟内存
集群模式
依赖客户端分片(如Twemproxy)
原生Cluster模式支持
适用场景
简单键值缓存(如会话、HTML片段)
缓存、消息队列、实时统计等复杂场景

Redis的作者的建议

Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较:

  1. Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。

  2. 内存使用效率对比:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。

  3. 性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。

总结一下:Memcached是解决简单缓存问题的可靠选择,而Redis通过提供更丰富的功能和各种各样的特性而优于Memcached,这些特性对于解决复杂的场景更有优势。

WordPress使用哪个做缓存好?

如果单纯作为内存缓存来使用,两者其实没有什么区别,那么为什么WPJAM Basic为什么使用Memcached呢?

这里有一份4核CPU/8G内存的服务器上的测试数据:

操作
Memcached QPS
Redis QPS
GET请求
120,000+
100,000+
SET请求
90,000+
80,000+

可以看出在WordPress这样简单的键-值缓存,并且需要处理大量简单数据,Memcached是一个更好的选择。

此外我们一开始就选择了Memcached做WordPress的内存缓存的存储介质,并且在使用Memcached做内存缓存过程中,针对出现的各种的问题,我也做了很多的优化,比如我们在后台「WPJAM」菜单下的「系统信息」中展示「Memcached」的各种信息。

当然如果你已经使用了Redis做内存缓存或者更熟悉Redis,WordPress官方插件库也有很多第三方提供了Redis的object-cache.php,和使用Memcached一样,只需要将对应的object-cache.php上传到wp-content目录即可。

此外也有小伙伴问,WPJAM Basic会不会集成Redis,让大家自己选,这个可以明确的说,目前作为简单缓存功能,Memcached已经足够好用,不会再花时间集成Redis。

最后还有个问题,Memcached和Redis可以一起用吗?如果作为缓存,WordPress只能选择一个,因为你上传谁的object-cache.php,就是用谁得了。

但是不等于使用Memcached作为缓存,就不能使用Redis了,比如我们之前就利用Redis的一些特性做过一些开发,比如因为Redis单线程天然串行排队的特性,我们在花生小店秒杀的功能中就是使用Redis进行处理的,还有一些简单的消息队列的功能处理,也是基于Redis进行开发的。

简单总结

所以最后总结说一下,如果简单的key-value的内存缓存,建议使用Memcached,WordPress绝大部分站点也是使用Memcached进行缓存的,此外WPJAM Basic也对此优化得比较完善。

如果要进行复杂的程序开发,比如上面说的电商的秒杀功能,消息队列系统等,那么Redis才是发挥其长处的地方。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号