热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RedisVsMemcached

因为我们项目上没有使用过两种,而我依旧对他们孰优孰劣比较好奇。所以我逛了很多国内外的网站,得到了以下的结论。首先,Redis和Memcached是两款非常给力的、快速的、并且都是使

因为我们项目上没有使用过两种,而我依旧对他们孰优孰劣比较好奇。

所以我逛了很多国内外的网站,得到了以下的结论。

首先,Redis和Memcached是两款非常给力的、快速的、并且都是使用内存做分布式缓存数据的服务。对于提升我们网站的的性能有很大的帮助(通过缓存数据、HTML片段或其他)。

接下来,通过几点来进行对比:

读写速度

  • 都非常快。总体上显示,redis的速度与memcached几乎一样快。

内存的使用

  • memcached:设置缓存空间大小,但当插入项时,守护进程就会自动增加空间大小。没有真正的方法来回收这些空间。所有的键都可能过期,可以刷新数据库,它仍然会使用配置的全部RAM。
  • redis:Redis永远不会使用超出我们设置的空间大小。并且它会智能返回不需要的空间,例如:我将100,000个2KB的字符串(200MB)存储在这两个字符串中。Memcached RAM的使用增加到225MB。Redis RAM的使用增加到228MB。在刷新了这两个数据之后,redis删除了29MB,而memcached则保持在225MB。
  • 磁盘I/O:对于redis来说,这是一个明显的优势,因为它在缺省情况下是这样做的,并且具有可配置的持久性。在没有第三方工具的情况下,Memcached没有向磁盘转储的机制。

memcached

  • Memcached是一个简单易变的高速缓存服务器。它允许您将键/值对存储在一个值限制为1MB的字符串中。
  • 我们可以快速的访问这些值,这个速度指的是网络或内存带宽的饱和。
  • 当您重新启动memcached时,数据就会消失。这对于缓存来说是很好的。我们不应该把重要的东西储存在那里。

redis

  • Redis可以像memcached一样完成相同的工作,而且可以做得更好。
  • Redis也可以充当缓存。它也可以存储键/值对。redis,可以达到512MB
  • 可以关闭持久性,并且在重新启动时也会丢失数据。
  • 它的速度也非常快,经常受到网络或内存带宽的限制。
  • Redis有集群支持,并带有高可用性的工具(redis-sentinel)。在过去的几年中,redis也成为了第三方工具的领导者。Redis Labs、亚马逊等公司提供了许多有用的Redis工具和服务。围绕redis的生态系统要大得多。大规模部署的数量现在可能比memcached更大。

 

Redis不仅仅是一个缓存。它是一个内存中的数据结构服务器。

Redis的文档比memcached更完善

容灾

  • 在快照模式中,突然崩溃可能导致少量丢失的数据。如果您绝对需要确保没有数据丢失,不要担心,redis也有AOF (Append Only File) 模式。

支持更多的数据类型

  • Memcached仅限于字符串,但Redis作为一个数据结构服务器,可以提供多种不同的数据类型。它还提供了所需的命令,以充分利用这些数据类型。例如:Strings、Hashes、Lists、Sets等等(查看数据类型官方文档)

事物性和原子性

  • redis中的命令是原子性的,这意味当向redis写入一个值时,所有连接到redis的客户端都可以看到该值。
  • 从技术上讲,memcached也是原子性的。

流水线

  • Redis提供了一个名为“流水线”的特性。如果有许多想要执行的redis命令,可以使用管道将它们发送到redis,而不是一次一次。
  • 通常,当对redis或memcached执行命令时,每个命令都是一个单独的请求/响应周期。通过使用管道,redis可以缓冲多个命令,并一次性执行所有命令,响应所有命令。

总结

memcached,它是一个强大的、简单的、稳定的、成熟的工具。甚至还有一些情况,它比redis快一些。

如果您已经在使用memcached缓存,如果它满足您的需要,那么就继续使用它。如果是新的项目,我推荐您使用redis。

 


推荐阅读
  • 在分布式系统中,当多个服务器共同提供服务时,如何高效地将请求路由到正确的服务器是一个关键问题。传统的方法如简单哈希取模在服务器数量变化时会导致大量数据迁移。本文探讨了一致性哈希算法如何有效解决这一问题,确保系统的稳定性和高效性。 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 在项目中使用 Redis 时,了解其不同架构模式(如单节点、主从复制、哨兵模式和集群)对于确保系统的高可用性和扩展性至关重要。本文将详细探讨这些模式的特点和应用场景。 ... [详细]
  • 本文提供了一套实用的方法论,旨在帮助开发者构建能够应对高并发请求且易于扩展的Web服务。内容涵盖了服务器架构、数据库管理、缓存策略以及异步处理等多个方面。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 深入解析ESFramework中的AgileTcp组件
    本文详细介绍了ESFramework框架中AgileTcp组件的设计与实现。AgileTcp是ESFramework提供的ITcp接口的高效实现,旨在优化TCP通信的性能和结构清晰度。 ... [详细]
  • 深入解析Spring Cloud微服务架构与分布式系统实战
    本文详细介绍了Spring Cloud在微服务架构和分布式系统中的应用,结合实际案例和最新技术,帮助读者全面掌握微服务的实现与优化。 ... [详细]
  • 本文探讨了大型服务端开发过程中常见的几个误区,包括异步任务处理不当、日志同步模式使用、网络操作未设置超时、缓存命中率及响应时间未统计、单一缓存模式、分布式缓存加锁不当以及团队管理上的误区,旨在帮助开发者避免这些常见错误。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 解决Redis大Key问题的有效策略
    本文探讨了Redis中大Key的问题及其解决方案。大Key是指Redis数据库中占用大量内存的键值对,通常指字符串类型超过10KB的数据。文章详细分析了大Key的影响及检测方法,并提出了有效的处理措施。 ... [详细]
  • 本文探讨了随着并发需求的增长,MySQL数据库架构如何从简单的单一实例发展到复杂的分布式系统,以及每一步演进背后的原理和技术解决方案。 ... [详细]
author-avatar
shi6321
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有