Redis(十五):Redis和Memcached比较

   Memcached 是一个高性能的分布式内存对象缓存系统,由LiveJournal的Brad Fitzpatrick开发,用于动态Web应用以减轻数据库负载。它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。 

    Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。redis的作者,叫Salvatore Sanfilippo,来自意大利的西西里岛,居住在卡塔尼亚。目前供职于Pivotal公司。他使用的网名是antirez。

    Redis和Memcache都是保存键值对的内存数据库,那么Memcache和Redis的区别是什么呢,下面我们将在以下几个方面进行比对。

1. 数据类型的支持

  • Redis 6.0支持7种对象类型,包括:字符串(OBJ_STRING)、列表(OBJ_LIST)、集合(OBJ_SET)、有序集合(OBJ_ZSET)、哈希(OBJ_HASH)、模块(OBJ_MODULE)和消息队列(OBJ_STREAM);
  • Memcache只支持k-v结构,但它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等;

2. 持久化的支持

  • Redis两种持久化方式,分别是RDB持久化和AOF持久化,如果Redis宕机重启之后,Redis可以根据AOF文件进行恢复;
  • Memcache不支持持久化功能,宕机重启之后,无法恢复;

3. 分布式的支持

  • Redis在v3.0开始支持Redis集群,这样可以把Redis从单机扩展到集群,容量上也可以进行扩展;
  • Memcache服务器端没有分布式功能,如果想实现分布式,可以通过客户端进行实现;

4. 键值对大小支持

  • Redis的键值对中支持value的最大值是512M;
  • Memcache一个value最大只支持1MB,key 最大250个字符;

5. 网络通信实现

  • Redis的网络通信通过自己实现epoll、kqueu、/dev/poll等各个接口,可以在Linux、BSD、Solaris等操作系统上进行移植;
  • Memcache的网络通信模块使用了libevent库,libevent封装了各个操作系统下的各种网络接口,方便进行程序移植;

6. 内存管理实现

  • Redis的内存管理使用FaceBook开源的Jemalloc进行内存管理,Jemalloc的实现参考这里
  • Memcache使用Slab Allocation机制进行内存管理,Slab Allocation的机制很简单,按照预先规定的大小,将分配的内存分割成各种尺寸的chunk,并把尺寸相同的chunk分成组,分配的块可以重复利用,不释放到内存中。

7. 多线程的支持

  • Redis 6.0开始支持多线程,通过在redis.conf配置文件中可以配置线程个数;
  • Memcache也支持多线程,在memcache启动时,可以通过-t参数指定需要启动的线程个数;

8. 主从复制的支持

  • Redis支持主从复制,并且支持哨兵机制,当master服务器不可用时,可以从slave服务器中选择一个服务器作为master继续提供服务;
  • Memcache不支持主从复制,单机可靠性收到影响;

9. 使用场景

  • 如果有持久方面的需求或对数据类型和处理有要求的应该选择redis;
  • 如果简单的key/value 存储应该选择memcached;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值