redis,memcache及mongodb特性与区别

3 篇文章 0 订阅
2 篇文章 0 订阅

1. Redis

是一个内存中的数据结构存储系统,支持多种数据结构:包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。数据支持持久化(RDB快照和AOF方式,默认是rdb方式存储),并且支持主从模式(一主多从/一主一从)。

redis特性概述

  • 支持多种数据结构,如 string(字符串)、 list(双向链表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基数估算);
  • 支持持久化操作,可以进行aof及rdb数据持久化到磁盘,从而进行数据备份或数据恢复等操作,较好的防止数据丢失的手段;
  • 支持通过Replication进行数据复制,通过master-slave机制,可以实时进行数据的同步复制,支持多级复制和增量复制,master-slave机制是Redis进行HA的重要手段;
  • 单线程请求,所有命令串行执行,并发情况下不需要考虑数据一致性问题;
  • 支持pub/sub消息订阅机制,可以用来进行消息订阅与通知;
  • 支持简单的事务需求,但业界使用场景很少,并不成熟。
  • 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事务支持比较弱,只能保证事务中的每个操作连续执行,

2. Memcached

是一个分布式高速缓存系统用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

Memcached特性概述

  • 使用物理内存作为缓存区,可独立运行在服务器上,每个进程最大内存为2G。如果想缓存更多的数据,可以开辟更多的Memcache进程(不同端口)或者使用分布式Memcache进行缓存。
  • 使用K-V形式的方式来存储数据,这是一种单索引的结构化数据组织形式,查询的效率高
  • 协议简单:基于文本行的协议,直接通过telnet在Memcache服务器上进程存取数据操作,简单 基于libevent高性能通信
  • 内置的内存管理方式:使用stab Allcation进行内存管理,按照既定的内存,将内存切割成特定的长度来存储相应的数据
  • 分布式:使用hash一致性算法,进行分布式存储数据,各个Memcache服务器之间互不通讯,各自独立存取数据,不共享任何信息,服务器并不具有分布式功能,分布式部署取决于memcache客户端
  • 缓存策略:LRU到期失效策略,即在内存用完之后,服务器端会根据LRU策略,计算最近没有使用过的数据,将其进行替换

3. Mongodb

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

Mongodb特性概述

  • 适合大数据量的存储,依赖操作系统VM做内存管理,吃内存也比较厉害,服务不要和别的服务在一起;
  • 支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富;
  • 支持master-slave,replicaset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切分机制;
  • 从1.8版本开始采用binlog方式支持持久化的可靠性;
  • MongoDB不支持事务;
  • MongoDB内置了数据分析的功能(mapreduce),其他不支持

Redis、Memcache、Mongodb区别(个人总结,欢迎大牛指点)

名称RedisMemcacheMongoDB
协议类似于telnet文本协议bson,自定义二进制
数据结构5种(string、list、set、zset、hash)1种Key-Value丰富的数据类型,接近关系型数据库
可靠性支持数据持久化(RDB\AOF)不支持从1.8版本后,采用binlog方式(类似Mysql) 支持持久化
内存及存储Redis2.0后支持虚拟内存特性(VM) 突破物理内存限制;数据可以设置时效性,类似于memcache内存存储,LRU过期策略适合大数据量存储,依赖系统虚拟内存,采用镜像文件存储;内存占用率比较高,官方建议独立部署在64位系统
处理模式单核单线程多核多线程多线程
可用性依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整个快照,无增量复制;不支持auto sharding,需要依赖程序设定一致性hash机制支持master-slave,replicatset(内部采用paxos选举算法,自动故障恢复),auto sharding机制,对客户端屏蔽了故障转移和切片机制
应用场景较小数据量的性能和运算;适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等;用于在动态系统中减少数据库负载,提升性能;做缓存,提高性能(适合读多写少,对于数据量比较大,可以采用sharding)主要解决海量数据的访问效率问题
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值