数据缓存Memcached与Redis的区别和选择
一、Memcached简介
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。
Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。
Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。
本质上,它是一个简洁的key-value存储系统。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
二、Redis简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
1、Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2、Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
3、Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势
1、性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
2、丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
3、原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
4、丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis与其他key-value存储有什么不同?
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
三、Memcached与Redis的区别和选择
由于Redis只使用单核,而Memcached可以使用多核,所以在比较上,平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。说了这么多,结论是,无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈。
你需要关注内存使用率。对于key-value这样简单的数据储存,Memcached的内存使用率更高。如果采用hash结构,Redis的内存使用率会更高。当然,这些都依赖于具体的应用场景。
你需要关注关注数据持久化和主从复制时,只有Redis拥有这两个特性。如果你的目标是构建一个缓存在升级或者重启后之前的数据不会丢失的话,那也只能选择Redis。
你应该关心你需要的操作。Redis支持很多复杂的操作,甚至只考虑内存的使用情况,在一个单一操作里你常常可以做很多,而不需要将数据读取到客户端中(这样会需要很多的IO操作)。这些复杂的操作基本上和纯GET和POST操作一样快,所以你不只是需要GET/SET而是更多的操作时,Redis会起很大的作用。
对于两者的选择还是要看具体的应用场景,如果需要缓存的数据只是key-value这样简单的结构时,我在项目里还是采用Memcached,它也足够的稳定可靠。如果涉及到存储,排序等一系列复杂的操作时,毫无疑问选择Redis。
四、关于Redis和Memcached的不同,主要有以下几点:
1、存储方式:
Memcached 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小
Redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化(笔者注:有快照和AOF日志两种持久化方式,在实际应用的时候,要特别注意配置文件快照参数,要不就很有可能服务器频繁满载做dump)。
2、数据支持类型:
Redis在数据支持上要比Memcached多的多。
3、使用底层模型不同:
新版本的Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
4、运行环境不同:
Redis目前官方只支持LINUX 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上
五、总结
个人总结一下,有持久化需求或者对数据结构和处理有高级要求的应用,选择Redis,其他简单的key/value存储,选择Memcached。
-
人类大脑功能图解
大脑为神经系统最高级部分,由左、右两个大脑半球组成,两半球间有横行的神经纤维相联系。每个半球包括:大脑皮层(大脑皮质):是表面的一... 1202 0 24-07-14 -
彻底去广告 冰点文库下载器
冰点下载器是一款非常实用的下载工具,该软件体积小巧、绿色免安装、无需注册和登陆,同时还不需要更任何的积分或者财富值,操作起来简单易... 939 0 24-12-22 -
wordpress爱前端主题IUX
爱前端是一款由主题巴巴团队原创设计开发的WordPress博客、自媒体、资讯主题。主题首页内容可展示幻灯片置顶文章、专题列表等精妙设计的内... 526 0 21-07-12 -
C语言函数参考手册
C语言作为当前程序开发中最流行的编程语言之一,以其简单、高效、快捷、方便的特性吸引了大批用户。根据笔者使用C语言的经验,相信对C语言... 1204 0 24-05-24 -
巅峰爱抢购1.88 - 电商抢购助手软件
巅峰爱抢购最新版本是款功能强大的电商抢购助手软件。它可以为用户提供方便快捷的电商抢购功能,让用户可以第一时间抢到自己喜欢的商品。同... 773 0 25-05-15 -
2004-2012全国各地教师招聘历年真题
【豆丁★教育百科】2010与2011年青岛教师招聘真题.doc【豆丁★教育百科】2011-2012年教师招聘考试 公共基础知识.doc【豆丁★教育百科】201... 1150 0 24-08-20 -
excel导出导入数据
* Enter 导出excel共同方法 ... * @param unknown_type $expTitle * @param unknown_type $expCellName * @param unknown_type $expTableData 433 0 21-06-01 -
大幅成倍提升Redi处理性能
Redis 自问世以来,广受好评,应用广泛。但相比, Memcached 单实例压测 TPS 可以高达百万,线上可以稳定跑 20~40 万而言,Redis ... 891 0 24-05-24
发表我的评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~