文档章节

Redis和Memcached的区别和选型

dev_chao
 dev_chao
发布于 2017/04/10 17:05
字数 775
阅读 28
收藏 0

1.先看下面的对比图

  Redis Memcached
网络IO模型 单线程的IO复用的网络模型 多线程的非阻塞IO复用的网络模型
支持的数据结构 key-value数据类型,还支持list、set、zset、hash等 key-value形式存储和访问数据
内存管理机制 现场申请内存 预分配的内存池
数据存储及持久化 in-memory、支持持久化:快照、AOF in-memory,不支持持久化
虚拟内存 物理内存用完时,可利用虚拟内存(不建议开启,开销大) 物理内存用完时,LRU替换掉不常用的缓存
数据一致性 提供事务,保证命令的原子性,中间不会被任何操作打断 提供了cas命令,保证多个并发访问操作同一份数据的一致性
集群管理 服务器端构建分布式存储 只能采用客户端实现分布式存储
性能 单核,数据量<10w 时高,数据量>10w时低 多核,数据量<10w时低,数据量>10w时高

2.集群键值分布

      Memcached本身并不支持分布式,因此只能在客户端通过像一致性哈希这样的分布式算法来实现Memcached的分布式存储。相较于Memcached只能采用客户端实现分布式存储,Redis更偏向于在服务器端构建分布式存储。采用键-槽映射算法,最终定位到缓存所在节点。

3.总结

      a.没有必要过多的关心性能,因为二者的性能都已经足够高了。由于Redis只使用单核,而Memcached可以使用多核,所以在比较上,平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。说了这么多,结论是,无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈。(比如瓶颈可能会在网卡)

      b.如果要说内存使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。当然,这和你的应用场景和数据特性有关。 (这点不是很理解)

      c.如果你对数据持久化和数据同步有所要求,那么推荐你选择Redis,因为这两个特性Memcached都不具备。即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的。

      因此,我们可以得出一个结论:在简单的Key/Value应用场景(例如缓存),Memcached拥有更高的读写性能;而在数据持久化和数据同步场景,Redis拥有更加强大的功能和更为丰富的数据类型。

 

© 著作权归作者所有

共有 人打赏支持
dev_chao
粉丝 3
博文 36
码字总数 11158
作品 0
广州
私信 提问
MongoDB与Redis的区别?他们分别用在什么场景下最合适?

最近在学习的时候,感觉对MongoDB与Redis的应用场景有点蒙,不知道这两个东西有什么核心应用区别,另外,还有人把这两个东西与Memcached比较,更是感觉风马牛不相及。 个人理解Memcached纯粹...

bluntFish
2016/05/22
16.5K
3
redis和其他缓存数据库的区别

Redis 与其他 key - value 缓存产品有以下三个特点: (1)Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 (2)Redis不仅仅支持简单的key-val...

码上青天
2018/05/03
0
0
Redis和Memcached的差异

Redis 和 Memcache 都是基于内存的数据存储系统。Memcached是高性能分布式内存缓存服务;Redis是一个开源的key-value存储系统。与Memcached类似,Redis将大部分数据存储在内存中,支持的数据...

庆沉
2016/10/08
0
0
Memcache与Redis有什么区别?

Redis 和 Memcache 都是基于内存的数据存储系统。Memcached是高性能分布式内存缓存服务,其本质上就是一个内存key-value数据库。Redis是一个开源的key-value存储系统。与Memcached类似,Red...

PaaS小魔仙
2018/07/16
0
0
memcached和redis的区别

Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较,总体来看还是比较客观的,现总结如下: 1)性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以...

疯狂的兔子
2015/03/09
168
0

没有更多内容

加载失败,请刷新页面

加载更多

Jmeter参数的AES加密使用

在Jmeter日常实践中,大家应该都遇到过接口传参需要加密的情况。以登陆为例,用户名和密码一般都需要进行加密传输,在服务端再进行解密,这样安全系数会更高,但在使用jmeter进行接口测试的时...

程序猿拿Q
15分钟前
0
0
MYSQL 日期函数 Date and Time Functions

Table 12.13 Date and Time Functions Name Description ADDDATE() Add time values (intervals) to a date value ADDTIME() Add time CONVERT_TZ() Convert from one time zone to another ......

_liucui_
21分钟前
0
0
Android代码混淆ProGuard工作原理简介

ProGuard能够对Java类中的代码进行压缩(Shrink),优化(Optimize),混淆(Obfuscate),预检(Preveirfy)。    1. 压缩(Shrink): 在压缩处理这一步中,用于检测和删除没有使用的类,字段...

SuShine
23分钟前
0
0
Idea 2018激活

教程地址: https://www.52pojie.cn/thread-781394-1-1.html 亲测可用

一个不正经的程序员
29分钟前
0
0
Android组件化开发实践和案例分享

目录介绍 1.为什么要组件化 1.1 为什么要组件化 1.2 现阶段遇到的问题 2.组件化的概念 2.1 什么是组件化 2.2 区分模块化与组件化 2.3 组件化优势好处 2.4 区分组件化和插件化 2.5 applicatio...

潇湘剑雨
30分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部