写点什么

Redis、MongoDB 及 Memcached 的区别,老男孩 linux 运维 54 期视频

作者:Java高工P7
  • 2021 年 11 月 10 日
  • 本文字数:1168 字

    阅读完需:约 4 分钟

1、特点


1.1 Redis


支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash 表)、set(集合)、zset(排序 set)、hyperloglog(基数估算);


支持持久化操作,可以进行 aof 及 rdb 数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段;


支持通过 Replication 进行数据复制,通过 master-slave 机制,可以实时进行数据的同步复制,支持多级复制和增量复制,master-slave 机制是 Redis 进行 HA 的重要手段;


单线程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题;


支持 pub/sub 消息订阅机制,可以用来进行消息订阅与通知;


支持简单的事务需求,但业


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


界使用场景很少,并不成熟。


Redis 只能使用单线程,性能受限于 CPU 性能,故单实例 CPU 最高才可能达到 5-6wQPS 每秒(取决于数据结构,数据大小以及服务器硬件性能,日常环境中 QPS 高峰大约在 1-2w 左右);


支持简单的事务需求,但业界使用场景很少,并不成熟,既是优点也是缺点;


支持(快照、AOF):依赖快照进行持久化,AOF 增强了可靠性的同时,对性能有所影响;


Redis 在 string 类型上会消耗较多内存,可以使用 dict(hash 表)压缩存储以降低内存耗用;


MC 和 Redis 都是 Key-Value 类型,不适合在不同数据集之间建立关系,也不适合进行查询搜索。比如 redis 的 keys pattern 这种匹配操作,对 redis 的性能是灾难;


Redis 在 2.0 版本后增加了自己的 VM 特性,突破物理内存的限制;可以对 key value 设置过期时间(类似 memcache);


Redis 事务支持比较弱,只能保证事务中的每个操作连续执行,


1.2 MongoDB


适合大数据量的存储,依赖操作系统 VM 做内存管理,吃内存也比较厉害,服务不要和别的服务在一起;


支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富;


支持 master-slave,replicaset(内部采用 paxos 选举算法,自动故障恢复),auto sharding 机制,对客户端屏蔽了故障转移和切分机制;


从 1.8 版本开始采用 binlog 方式支持持久化的可靠性;


MongoDB 不支持事务;


MongoDB 内置了数据分析的功能(mapreduce),其他不支持


1.3 Memcached


可以利用多核优势,单实例吞吐量极高,可以达到几十万 QPS(取决于 key、value 的字节大小以及服务器硬件性能,日常环境中 QPS 高峰大约在 4-6w 左右)。适用于最大程度扛量;


支持直接配置为 session handle。


只支持简单的 key/value 数据结构,不像 Redis 可以支持丰富的数据类型;


无法进行持久化,数据不能备份,只能用于缓存使用,且重启后数据全部丢失;


无法进行数据同步,不能将 MC 中的数据迁移到其他 MC 实例中;


内存分配采用 Slab Allocation 机制管理内存,value 大小分布差异较大时会造成内存利用率降低,并引发低利用率时依然出现踢出等问题。需要用户注重 value 设计。


Memcached 可以修改最大可用内存,采用 LRU 算法。

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
Redis、MongoDB及Memcached的区别,老男孩linux运维54期视频