谈谈redis,memcache,mongodb的区别和具体应用场景
发布时间:2025-05-25 01:41:35 发布人:远客网络
一、谈谈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行。