搜尋

首頁  >  問答  >  主體

Redis和Memcached有什么区别?

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

高洛峰高洛峰2939 天前1592

全部回覆(3)我來回復

  • 三叔

    三叔2016-11-14 11:32:07

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

    回覆
    0
  • 欧阳克

    欧阳克2016-11-14 11:31:59

    看情况而定吧!

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

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

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

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

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


    回覆
    0
  • 三叔

    三叔2016-11-14 11:31:45

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

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

    简述

    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要被提及的更多的原因。


    回覆
    0
  • 取消回覆