简述

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和Memcached的区别的更多相关文章

  1. Redis与Memcached的区别

    传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量 ...

  2. 也谈谈 Redis 和 Memcached 的区别

    本文作者: 伯乐在线 - 朱小厮 . 说到redis就会联想到memcached,反之亦然.了解过两者的同学有那么个大致的印象: redis与memcached相比,比仅支持简单的key-value数 ...

  3. 【转载】Redis与Memcached的区别

    传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量 ...

  4. (转)Redis与Memcached的区别

    如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点: 1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储. 2 Redis支持 ...

  5. Redis 与 Memcached 的区别

    [转]Redis 与 Memcached 的区别 传统 MySQL + Memcached 架构遇到的问题     实际上 MySQL 是适合进行海量数据存储的,通过 Memcached 将热点数据加 ...

  6. Redis和Memcached的区别【转】

    如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储.2 Redis支持数据 ...

  7. 好好耕耘 redis和memcached的区别

    观点一: 1.Redis和Memcache都是将数据存放在内存中,都是内存数据库.不过memcache还可用于缓存其他东西,例如图片.视频等等: 2.Redis不仅仅支持简单的k/v类型的数据,同时还 ...

  8. C#语法——泛型的多种应用 C#语法——await与async的正确打开方式 C#线程安全使用(五) C#语法——元组类型 好好耕耘 redis和memcached的区别

    C#语法——泛型的多种应用   本篇文章主要介绍泛型的应用. 泛型是.NET Framework 2.0 版类库就已经提供的语法,主要用于提高代码的可重用性.类型安全性和效率. 泛型的定义 下面定义了 ...

  9. REDIS与MEMCACHED的区别 8大点

    如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储.2 Redis支持数据 ...

随机推荐

  1. 新装kafka与zookeeper配置

    zookeeper配置 dataDir=/opt/kafka_2.11-2.0.0/data/zookeeper # 尽量不要放在tmp# the port at which the clients ...

  2. Tomcat 7集群基于redis的session共享设置

    经过测试之后,发现是tomcat中redis相关jar包问题,替换jar包后A产品运行正常. tomcat/lib目录下将commons-pool2-2.1.jar.jedis-2.1.0.jar.t ...

  3. Maven仓库—Nexus环境搭建及使用

    使用Sonatype Nexus搭建Maven私服后如何添加第三方JAR包 http://blog.csdn.net/yanjun008/article/details/42084109 Nexus介 ...

  4. Zabbix点滴记录

    转自 眄眄的闺蜜 简单检查中的icmppingloss[<target>,<packets>,<interval>,<size>,<timeout ...

  5. Java动态代理的两种实现方法

    注:文章转载自:https://blog.csdn.net/m0_38039437/article/details/77970633 一.代理的概念 动态代理技术是整个java技术中最重要的一个技术, ...

  6. 【389】Implement N-grams using NLTK

    Ref: Natural Language Toolkit Ref: n-grams in python, four, five, six grams? Ref: "Elegant n-gr ...

  7. linux console 显示颜色【转】

    http://blog.csdn.net/hejinjing_tom_com/article/details/12162491 引言: 由于在c代码中看到过打印彩色字, 又对PS1 想进一步了解,才有 ...

  8. Java解决小孩围圈问题

    问题描述:一堆小孩围成一个圈,从第一个小孩开始数,每数到第三个便把第三个孩子删去,数到只剩一个小孩为止,并求该孩子的具体编号. 解决办法 1. package test; public class C ...

  9. Android Debug Bridge命令介绍[转]

    Android Debug Bridge命令介绍 Android Debug Bridge的一些基本命令.这个工具直译过来就是Android调试桥的意思.它提供了强大的特性,例如复制文件到设备或从设备 ...

  10. slot 插槽的使用

    在vue 中父组件中的子组件在子组件中添加内容(html标签.文本内容),在子组件中加入slot这样页面中就会呈现出在父组件填写的内容,例如: 父组件中hello是子组件,在子组件中插入slot这样子 ...