沫延说
沫延说

内存对象缓存系统Memcached与Redis的区别与理解

前    言

内存对象缓存系统处于(服务器)生产环境中动态Web应用与Database(数据库,以下简称”DB”)之间的应用,用于在内存中缓存数据库查询结果来减轻对数据库的负载同时可以提高查询效率.目前最常使用的两款产品分别为Memcached和Redis.本文对两款产品的设计区别与个人理解和建议进行一个梳理,仅供参考

区    别

相对于更专业性的文章,我更喜欢用”中文”来解释”区别”,对于Memcached和Redis,可以理解为Memcached更加专注于特定数据,并且采用更加成熟稳重的方式缓存进内存中,可以理解为目标明确,精准打击.而Redis的设计更加激进,不仅支持更多类型的数据的缓存,还结合最新理念进行多技术的融合型创新,可以理解为特种作战.如果一定要说谁比谁强一些,我想,对于性能方面这两款应用选择任何一个均已经可以满足全球89.67%(没错,掐指一算)的站点,对于剩下的10.33%(来源于用1减去刚才的掐指一算),则需要根据其优势再结合业务类型再做斟酌

优    势

Memcached

  • 更加成熟,保守意味着稳定
  • 协议简单,效率高
  • 并发性能好
  • 提供多核心支持

Redis

  • 代码逻辑复杂,适用多种数据缓存,更加广泛的应用场景
  • 支持多种数据缓存
  • 多种内存调度机制
  • 支持不常用数据进行swap交换,具有持久化机制
  • 内存占用更低,同时内存使用率更高
  • 通过算法自动清理无效或过期的缓存
  • 具备binlog功能

劣    势

Memcached

  • 支持缓存的数据单一
  • 重启计算机或服务都会丧失缓存内容
  • 内存占用相对较高
  • 没有数据过期算法,只有再次访问时若发现时间戳不同才会更新缓存,或内存饱和会清理缓存

Redis

  • 代码逻辑复杂的代价就是针对性性能不强(相对)
  • 单一进程,命令是以串联方式执行的,上一条命令没执行完,下面的命令处于队列等待(例如在处理swap或者较大数据时)
  • 缓存较大数据性能不好

对比分析

通过上面的比较,不难看出Redis足够激进的设计,同时也为其带来了较严重的弊端,而Memcached虽然设计保守,硬伤归硬伤,但是其劣势也只能叫做弊端,对实际使用不存在什么很明显的缺陷.不可否认的是Redis考虑更加周到,且swap中的数据不会受宕机与重启服务的影响,可实现类似快速预载的功能

结    语

正如文中所提,实际使用中绝大多数网站并不存在性能瓶颈,其差异很难察觉,并且随着代码的优化迭代以及计算机性能的提升,实际使用环节差异也是微乎其微,根据个人的理解,我建议在多文字型的数据库中尝试使用Memcached性能更加强劲,例如Mediawiki,而在功能型的网站可以尝试Redis,对更多数据的缓存提高性能的同时可以保持可靠性.

 

没有标签
首页      未分类      内存对象缓存系统Memcached与Redis的区别与理解

Morton.L

文章作者

发表回复

textsms
account_circle
email


沫延说

内存对象缓存系统Memcached与Redis的区别与理解
前    言 内存对象缓存系统处于(服务器)生产环境中动态Web应用与Database(数据库,以下简称"DB")之间的应用,用于在内存中缓存数据库查询结果来减轻对数据库的负载同时可以提高查询效率.目…
扫描二维码继续阅读
2017-12-27