缓存使用中Redis,Memcached的共性和差异分析

来源:互联网 发布:时时彩源码免费下载 编辑:程序博客网 时间:2024/05/01 04:29

在各大互联网项目的业务场景中,Redis和Memcached都已经是必不可少的高并发场景缓存应用解决方案,本文将从为什么要用redis,memcached和什么时候使用Redis,什么时候使用Memcached两个角度来分析。

     一.为什么要用Redis,Memcached

         随着互联网产品技术的不断纵深发展,数据存储方案主要分为了两个方向,持久存储和临时存储(缓存)。

         作为持久存储的解决方案,现在当属Mysql大行其道,高大上的阿里再不缺钱,也开始在好几年前去IOE,不花冤枉钱,完成向开源产品Mysql的迁移,虽然最近又在开始大部分项目迁往自研的oceanbase,腾讯,百度,新浪,微博也是绝大部分核心产品基于Mysql,核心服务几乎都只相信Mysql,当然大家都有对官方发布的mysql版本有一定的优化和改进,只有部分大数据产品,对可靠性没有100%要求的敢于使用Hbase这种大数据存储系统。像Mongodb这种 NOSQL产品的代表,由于其许多方面还具有不可靠性,几乎还没听说有大型商业项目有对其敢作为核心服务数据库使用,总之一句话,在无论大中小的互联网项目中,Mysql几乎都是一切首选的数据库管理系统。

         但是单个实例的Mysql,能够负载的量级几乎都是qps千级已是极限,在高并发场景,依靠一直堆服务器总不是长久之道,并且在突然的峰值,sql响应延迟,实例升缩扩展都是远水不解近火,在这种场景下,缓存服务应运而生,经过各种项目实践验证,若项目其他业务模块没有瓶颈,单个实例下Redis,Memcached在qps 10万级都能表现良好,部署分布式缓存服务,几乎微博,微信这种量级的产品,核心服务响应峰值百万甚至更高量级请求处理也不是难事。


      二.什么时候使用Redis,什么时候使用Memcached。

           要明白各自的使用场景,就要先知道他们的共同点和差异点。

           共同点:

          1.Memcached与Redis都属于内存内、键值数据存储方案,都是nosql数据库中的杰出代表。

          2.几乎所有主流程序设计语言都有支持memcached和redis的客户端库,上手容易,门槛极低。

          3.两者都是数据存储于内存,这也导致两者几乎有相同的特征(与指标)表现、负载的数据吞吐量与延迟状况。

          4.Memcached与Redis服务端都可以在几分钟内极易安装,对于学习者成本极低。

          5.Memcached没有身份验证,Redis默认也无身份验证。(没有身份验证也是能够在高负载下表现优良的一个原因,当然如果别人知道了端口和ip,后果很严重,这也是目前redis最大的安全隐患,许多知名互联网项目目前都未进行身份验证)


          重要来了,差异点:

          1.Memcached将键名限制在250字节,值也被限制在不超过1MB,且只适用于普通字符串, Redis的键名和值都最大支持512M,MC这个坑估计许多人都遇到过。

          2.Memcached只支持字符串存储,几乎就限定了其应用场景就只是读数据,Redis支持字符串,哈希,列表,集合,有序集合,其应用场景瞬间扩大N倍,其丰富的内部函数和存储类型支持各种复杂操作,榜单场景处理中有自增自减函数,列表可以在队列处理场景中有入队,出队,集合函数有增加删除等等,有序集合还可以排序,计算。

          3.Memcached无数据持久性方案,只要重启,数据皆无,Redis还提供可选而且能够具体调整的数据持久性方案,管理员可以根据风险控制需要,通过在配置文件中设置,保持redis在一定时间周期持久化保持到磁盘上,当遇到即使重启,停电等情况,也能保持数据仍在,该特性对其在某些业务将redis作为持久存储方案有非常积极的意义。

          4.Redis还有一个非常重要的,远胜Memcached的特性,Memcached不支持主从,Redis能够提供复制功能,支持主从,复制功能可以帮助缓存体系实现高可用性配置方案,从而在遭遇故障的情况下继续为应用程序提供不间断的缓存服务,主从配置也是高并发下保证服务可靠性的标配。

          5.Memcached的数据回收机制使用的是LRU(即最低近期使用量)算法,Redis采用数据回收机制,能够将陈旧数据从内存中删除以提供新数据所必需的缓存空间。

          6.Memcached没有身份验证,Redis虽然默认无身份验证,但是它支持身份验证,虽然也几乎大家都没设置身份验证。

          7.Memcached的最大过期时间是一个月,否则会写入失败(这个坑我踩过),Redis还没有最大过期时间限制,但由于缓存机制两者不一样,在小于2.1.3的redis版本里,只能对key设置一次expire。redis2.1.3和之后的版本里,可以多次对key使用expire命令,更新key的expire time。

          所以通过以上分析,虽然Redis与Memcached都是作为两款非常优秀而且久经考验的缓存解决方案,大家能选择Redis,可以优先选择Redis,无他,Redis就是加强版的Memcached,当然,Memcached由于其结构简单,在小于1M的字符串存储场景下,效率会比redis稍微好一点点,也可以考虑Memcached


1 0
原创粉丝点击