• Memcached和Redis比较


    一、存储

    Memcached基本只支持简单的key-value存储方式。
    Redis除key-value之外,还支持list,set,sorted set,hash等数据结构;
    Redis支持数据的备份,即master-slave模式的数据备份;
    Redis支持数据的持久化(快照、AOF),可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用;
    Redis可以实现主从复制,实现故障恢复;
    Redis的Sharding技术,很容易将数据分布到多个Redis实例中。

    二、数据一致性

    Memcached的cas命令在并发场景下,保证数据的一致性。
    Redis事务支持比较弱,只能保证事务中的每个操作连续执行。

    三、内存管理

      Memcached使用预分配的内存池的方式。使用slab和大小不同的chunk来管理内存,Item根据大小选择合适的chunk存储,内存池的方式可以省去申请/释放内存的开销,并且能减小内存碎片产生,但这种方式也会带来一定程度上的空间浪费,并且在内存仍然有很大空间时,新的数据也可能会被剔除。
      Redis使用现场申请内存的方式来存储数据。并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片,Redis跟据存储命令参数,会把带过期时间的数据单独存放在一起,并把它们称为临时数据,非临时数据是永远不会被剔除的,即便物理内存不够,导致swap也不会剔除任何非临时数据(但会尝试剔除部分临时数据),这点上Redis更适合作为存储而不是cache。

    四、网络IO模型

      Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程。监听线程监听网络连接,接受请求后,将连接描述字pipe传递给worker线程,进行读写IO,网络层使用libevent封装的事件库。多线程模型可以发挥多核作用,但是引入了cache coherency和锁的问题,比如,Memcached最常用的stats 命令,实际Memcached所有操作都要对这个全局变量加锁,进行计数等工作,带来了性能损耗。
      Redis是单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll、kqueue和select。对于单纯只有IO操作来说,单线程可以将速度优势发挥到最大,但是Redis也提供了一些简单的计算功能,比如排序、聚合等,对于这些操作,单线程模型实际会严 重影响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的。

    五、性能

    二者的性能都很高。由于Redis只使用单核,而Memcached可以使用多核,所以在比较上,平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈。

    查看更多:
    开发一个微信小程序实例教程
    HTTP协议整理
    PHP安全之Web攻击
    秒杀系统设计优化
    MySQL优化
    Linux下常见的IO模型

  • 相关阅读:
    Mockito
    输入一个链表,输出该链表中倒数第k个结点。
    序列化
    全排列
    PostgreSQL libpq学习指南二
    PostgreSQL libpq 客户端接口(一)
    PostgreSQL 中的shared buffer
    通过 Unwrapper 解密 DBMS 程序包
    openGuassDB介绍及安装实践
    PostgreSQL中的ACID特性介绍
  • 原文地址:https://www.cnblogs.com/luyucheng/p/6236590.html
Copyright © 2020-2023  润新知