黑猴子的家:Redis 和 Memcache 区别

1、Memcached简介

Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能分布式内存缓存服务器。其本质上就是一个内存key-value数据库,但是不支持数据的持久化,服务器关闭之后数据全部丢失。Memcached使用C语言开发,在大多数像Linux、BSD和Solaris等POSIX系统上,只要安装了libevent即可使用。在Windows下,它也有一个可用的非官方版本(http://code.jellycan.com/memcached/)。Memcached的客户端软件实现非常多,包括C/C++, PHP, Java, Python, Ruby, Perl, Erlang, Lua等。当前Memcached使用广泛,除了LiveJournal以外还有Wikipedia、Flickr、Twitter、Youtube和WordPress等。

在Window系统下,Memcached的安装非常方便,只需从以上给出的地址下载可执行软件然后运行memcached.exe –d install即可完成安装。在Linux等系统下,我们首先需要安装libevent,然后从获取源码,make && make install即可。默认情况下,Memcached的服务器启动程序会安装到/usr/local/bin目录下。在启动Memcached时,我们可以为其配置不同的启动参数。

Memcache时一个内存对象缓存系统,用于加速动态web应用程序,减轻数据库负载。它可以应对任意多个连接,使用非阻塞的网络I/O

工作机制是在内存中开辟一块空间,然后建立一个hash表,memcached自管理这些hash表

2、Memcached 工作原理

Memcached基于健值对存储,key会通过hash算法转化成hash-key,便于查找。

Memcached有两个核心组件组成:服务端(server)和客户端,在一个memcached的查询中,客户端会先计算key的hash值来确定所出的server位置。当server确定以后,客户端对就会发送一个查询请求给对应的server,让它查找确切的数据。

3、Memcached 内存管理机制

emcached会预先分配内存,
Memcached使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存,ltem根据大小选择合适的chunk存储,内存池的方式可以省去申请/释放内存的开销,并且减少内存碎片的产生,但这种方式也会带来一定程度上的空间浪费

4、Redis 和 Memcache 区别

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

2)内存使用使用效率对比
使用简单的key-value存储的话,memcached的内存利用率会更高一点,如果redis采用hash结构来做key-value存储,由于其组合式的压缩,内存的利用率更高。

3)性能对比
由于redis只使用单核,而memcached使用多核,所以平均在每一个核上redis在存储小数据时比memcached性能更高,而在100Ks=以上的时候memcached性能要高于redis

4)内存管理机制的不同
在redis中,并不是所有的数据都一一直存储在内存中的,这是和memcached相比最大的一个区别
Redis只会缓存所有的key端的信息,如果redis发现内存的使用量超过某一个值,将触发swap的操作,redis根据相应的表达式计算出那些key对应value需要swap到磁盘,然后再将这些这些key对应的value持久化到磁盘中,同时再内存清除。同时由于redis将内存中的数据swap到磁盘的时候,提供服务的主线程和进行swap操作的子进程会共享这部分内存,所以如果更新需要swap的数据,redis将阻塞这个操作,直到子线程完成swap操作后才可以进行修改

5)数据持久化的支持
虽然redis是基于内存的存储系统,但是他本身是支持内存数据的持久化,而且主要提供两种主要的持久化策略,RDB快照和AOF日志,而memcached是不支持数据持久化的操作的。
RDB持久化通过保存了数据库的健值对来记录数据库状态的不同,AOF持久化是通过保存reds服务器所执行的命令来保存记录数据库的状态的,
RDB持久化保存数据库状态的方法是将msg,fruits,numbers三个健的健值对保存到RDB文件中,而AOF持久化保存数据库的状态则是将服务器执行的SET,SADD,RPUSH三个命令保存到AOF文件中的

6)应用场景不一样
Redis出来作为NoSQL数据库使用外,还能用做消息队列、数据堆栈和数据缓存等;
Memcached适合于缓存SQL语句、数据集、用户临时性数据、延迟查询数据和session等。

7)灾难恢复
memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复;

8)数据备份
Redis支持数据的备份,即master-slave模式的数据备份;

9)数据安全
memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化);

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

11)虚拟内存
Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘;

12)分布式
设定memcache集群,利用magent做一主多从;
redis可以做一主多从。也可以一主一从;

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

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

你可能感兴趣的:(黑猴子的家:Redis 和 Memcache 区别)