您当前的位置:首页 > 互联网教程

谈谈redis,memcache,mongodb的区别和具体应用场景

发布时间:2025-05-25 01:41:35    发布人:远客网络

谈谈redis,memcache,mongodb的区别和具体应用场景

一、谈谈redis,memcache,mongodb的区别和具体应用场景

从以下几个维度,对 redis、memcache、mongoDB做了对比。

都比较高,性能对我们来说应该都不是瓶颈。

总体来讲,TPS方面 redis和 memcache差不多,要大于 mongodb。

memcache数据结构单一。(key-value)

redis丰富一些,数据操作方面,redis更好一些,较少的网络 IO次数,同时还提供 list,set,

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

3、内存空间的大小和数据量的大小

redis在 2.0版本后增加了自己的 VM特性,突破物理内存的限制;可以对 key value设置过

memcache可以修改最大可用内存,采用 LRU算法。Memcached代理软件 magent,比如建立

10台 4G的 Memcache集群,就相当于有了 40G。 magent-s 10.1.2.1-s 10.1.2.2:11211-b

10.1.2.3:14000 mongoDB适合大数据量的存储,依赖操作系统 VM做内存管理,吃内存也比较厉害,服务

redis,依赖客户端来实现分布式读写;主从复制时,每次从节点重新连接主节点都要依赖整

个快照,无增量复制,因性能和效率问题,

所以单点问题比较复杂;不支持自动 sharding,需要依赖程序设定一致 hash机制。

一种替代方案是,不用 redis本身的复制机制,采用自己做主动复制(多份存储),或者改成

增量复制的方式(需要自己实现),一致性问题和性能的权衡

Memcache本身没有数据冗余机制,也没必要;对于故障预防,采用依赖成熟的 hash或者环

状的算法,解决单点故障引起的抖动问题。

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

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

memcache不支持,通常用在做缓存,提升性能;

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

Memcache在并发场景下,用 cas保证一致性redis事务支持比较弱,只能保证事务中的每个操作连续执行

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

redis:数据量较小的更性能操作和运算上

memcache:用于在动态系统中减少数据库负载,提升性能;做缓存,提高性能(适合读多写

少,对于数据量比较大,可以采用 sharding)

MongoDB:主要解决海量数据的访问效率问题。

memcache redis类型内存数据库内存数据库

数据类型在定义 value时就要固定数据类型不需要

有字符串,链表,集合和有序集合

分布式 magent master-slave,一主一从或一主多从

存储数据安全不支持使用 save存储到 dump.rdb中

灾难恢复不支持 append only file(aof)用于数据恢复

1、类型——memcache和 redis都是将数据存放在内存,所以是内存数据库。当然,memcache也可用于缓存其他东西,例如图片等等。

2、数据类型——Memcache在添加数据时就要指定数据的字节长度,而 redis不需要。

3、虚拟内存——当物理内存用完时,可以将一些很久没用到的 value交换到磁盘。

4、过期策略——memcache在 set时就指定,例如 set key1 0 0 8,即永不过期。Redis可以通

过例如 expire设定,例如 expire name 10。

5、分布式——设定 memcache集群,利用 magent做一主多从;redis可以做一主多从。都可

6、存储数据安全——memcache断电就断了,数据没了;redis可以定期 save到磁盘。

7、灾难恢复——memcache同上,redis丢了后可以通过 aof恢复。

yum-y install php-pecl-memcache

/etc/init.d/memcached start memcached-d-p 11211-u memcached-m 64-c 1024-P/var/run/memcached/memcached.pid

-c最大运行并发数-P memcache的 pid

//0压缩(是否 MEMCACHE_COMPRESSED) 30秒失效时间

$memcache= new Memcache;$memcache-> connect('127.0.0.1', 11211);$memcache-> set('name','yang',0,30);

if(!$memcache->add('name','susan',0, 30)){

//echo'susan is exist';}$memcache-> replace('name','lion', 0, 300); echo$memcache-> get('name');

//$memcache-> delete('name', 5);

printf"stats\r\n"| nc 127.0.0.1 11211

telnet localhost 11211 stats quit退出

redis-server/etc/redis.conf插入一个值

redis-cli set test"phper.yang"获取键值

redis-cli-p 6379 shutdown<?php

Redis();$redis->connect('127.0.0.1',6379);$redis->set('test',

'Hello World'); echo$redis->get('test'); Mongodb

apt-get install mongo mongo可以进入 shell命令行

pecl install mongo Mongodb类似 phpmyadmin操作平台 RockMongo

二、Redis和Memcache的区别总结

memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小;redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化(笔者注:有快照和AOF日志两种持久化方式,在实际应用的时候,要特别注意配置文件快照参数,要不就很有可能服务器频繁满载做dump)。

redis在数据支持上要比memecache多的多。

新版本的redis直接自己构建了VM机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

redis目前官方只支持LINUX上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上。

1、 Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等。

2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。

3、虚拟内存–Redis当物理内存用完时,可以将一些很久没用到的value交换到磁盘。

4、过期策略–memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire设定,例如expire name 10。

5、分布式–设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一,存储数据安全–memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化)。

参考资料:百度百科:redis百度百科:memcache

三、如何对memcache的数据进行遍历操作

memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。Memcache是danga.com的一个项目,最早是为 LiveJournal服务的,最初为了加速 LiveJournal访问速度而开发的,后来被很多大型的网站采用。目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。

目前,用到memcache的公司和网站也越来越多。Memcache的客户端操作一般都只提供了get,set等简单的操作,这些操作都是非常高效的。虽然memcache是个key-value存储的系统,但是在某些时候,我们可能需要遍历memcache的数据。

8. stats cachedump slab_id limit_num

通过这些stats命令我们就可以完成memcache存储的内容的遍历,OK,下面我们通过telnet直接连接到memcache通过这些命令来完成相关的操作。

telnet到192.168.15.225(局域网测试机器)的memcache服务器

执行stats items命令,可以看到出现很多的items行。