Redis和Memcached有什么区别?

WBOY
Release: 2016-07-06 13:51:38
Original
1069 people have browsed it

Redis里面也有键值对存储,也可以存在内存中,而且还支持持久化存储,而且redis的集群,分布式部署,镜像同步都是原生支持,比memcached要方便一些(memcached还得自己写一致性hash算法来判断某个key对应的value存储在哪个memcached节点上,很麻烦),那么memcached还有什么用呢?
为什么不直接全部都用redis替代memcache呢?
(我是看目前仍然有很多php教程,教科书都是讲memcached,提到redis的还是比较少,我也是看别人博客才知道有这么个东西的。)

回复内容:

Redis里面也有键值对存储,也可以存在内存中,而且还支持持久化存储,而且redis的集群,分布式部署,镜像同步都是原生支持,比memcached要方便一些(memcached还得自己写一致性hash算法来判断某个key对应的value存储在哪个memcached节点上,很麻烦),那么memcached还有什么用呢?
为什么不直接全部都用redis替代memcache呢?
(我是看目前仍然有很多php教程,教科书都是讲memcached,提到redis的还是比较少,我也是看别人博客才知道有这么个东西的。)

看情况而定吧!

  • Memcached是多线程非阻塞IO复用的网络模型;Redis使用单线程的IO复用模型

  • Memcached使用预分配的内存池的方式;Redis使用现场申请内存的方式来存储数据

  • Memcached的服务器端互相完全独立;Redis计划在服务器端内建对集群的支持

  • Memcached可以使用多核;Redis只使用单核

总之,使用简单的key-value存储的话,Memcached的内存利用率更高,当需要除key/value之外的更多数据类型支持时,使用Redis更合适。希望对你有帮助

Redis正在取代Memcached,但是你要知道,Redis是新东西,对于一个庞大的系统来说,要做到整体替换是需要时间的。
目前微博使用的就是Redis集群。

谢邀~~

之前外出没网,现在给题主一些我个人的观点以及一些参考资料,觉得有用的就取吧,有错也欢迎大家支持,觉得不错就点个赞咯~~~

首先我先说明一个观点:存在即合理,有人用说明它具有自身价值。

简述

memcached 和 redis 都很类似:都是内存型数据库,数据保存在内存中,通过tcp直接存取,优势是速度快,并发高,缺点是数据类型有限,查询功能不强,一般用作缓存。

那么题主说 memcached 的事情 redis 都可以做,那么为什么 memcached 还有人用?那是因为它们两者并不是完全可以相互替代的,它们也有各自的长短优缺点:

Memcached

Memcached的优点:

  • Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key、value的字节大小以及服务器硬件性能,日常环境中QPS高峰大约在4-6w左右)。

  • 适用于最大程度扛量,有效为服务器减压。

  • 支持直接配置为session handle。

  • 配置维护的坑比较少。

Memcached的局限性:

  • 数据结构很简单单一,只支持简单的key/value数据结构,不像Redis可以支持丰富的数据类型。

  • 无法进行持久化,数据不能备份,只能用于缓存使用,且重启后数据全部丢失。

  • 无法进行数据同步,不能将MC中的数据迁移到其他MC实例中。

  • Memcached内存分配采用Slab
    Allocation机制管理内存,value大小分布差异较大时会造成内存利用率降低,并引发低利用率时依然出现踢出等问题。需要用户注重value设计。

  • memcached服务端原生不支持水平扩展,必须在客户端编写缓存分布策略来实现分布式缓存,并且由于无法进行数据同步,因此生产环境中出现单机故障时可能会影响部分业务运行。

Redis

Redis的优点:

  • 支持多种数据结构,比如 string(字符串)、
    list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算)等等。

  • 支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段。

  • 支持通过Replication进行数据复制,通过master-slave机制,可以实时进行数据的同步复制,支持多级复制和增量复制,master-slave机制是Redis进行HA的重要手段。

  • 单线程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题。

  • 支持pub/sub消息订阅机制,可以用来进行消息订阅与通知。

  • 支持简单的事务需求,但业界使用场景很少,并不成熟。

Redis的局限性:

  • Redis只能使用单线程,性能受限于CPU性能,故单实例CPU最高才可能达到5-6wQPS每秒(取决于数据结构,数据大小以及服务器硬件性能,日常环境中QPS高峰大约在1-2w左右)。

  • 支持简单的事务需求,但业界使用场景很少,并不成熟,既是优点也是缺点。

  • Redis在string类型上会消耗较多内存,可以使用dict(hash表)压缩存储以降低内存耗用。

总结

在我看来,Redis在很多方面具备数据库的特征,或者说就是一个数据库系统,而Memcached只是简单的K/V缓存。

而且到底是用 redis 还是 memcached 这个还是看题主的需求,因为单纯是做缓存的话,memcached已经足够应付绝大部分的需求,redis 的出现只是提供了一个更加好的选择,但是不代表redis就能完全替代 memcached ,还是那句话,看你的需求是怎么样的。

按照技术的新旧来讲,redis 比 memcached 还更加新,但是成熟醒来说,memcached 应该更加好,再说现在潮流也有开始转投 mongodb了,因为redis 的数据库特征,mongodb更胜一筹。

很多公司的缓存策略中使用memcached的还是占大多数的,再者是redis,最后才是mongodb,发现没有,最新的技术在公司团队的应用还是需要时间的,旧的技术策略还是很多公司团队在用,因为技术成型而且稳定性要好,这也是memcached比redis要被提及的更多的原因。

看需求、看掌握

其实两者性能相近,但是redis性能会略好一些。
redis取代memcached是趋势。

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!