[关闭]
@1234567890 2018-03-21T07:26:37.000000Z 字数 934 阅读 1172

redis与memcache比较

缓存


存储的数据类型比较

Memcached基本只支持简单的key-value存储

Redis除key/value之外,还支持list,set,sorted,set,hash等众多数据结构,提供了KEYS

数据一致性问题

Memcached提供了cas命令,可以保证多个并发访问操作同一份数据的一致性问题

Redis没有提供cas 命令,并不能保证这点,不过Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断

网络模型

Memcache 和 Redis 网络模型都是IO复用模型。

但是Memcache 服务端使用多线程处理请求
redis服务端用单线程处理请求(单线程并不一定慢,因为都是内存操作)

内存管理

Memcache使用预分配的内存池的方式,内存池的方式可以省去申请/释放内存的开销,并且能减小内存碎片产生。这种方式也会带来一定程度上的空间浪费

Redis使用现场申请内存的方式来存储数据。会在一定程度上产生内存碎片(Resdis4内清理内存碎片,之前版本需要重启redis)。会把带过期时间的数据单独存放在一起,并把它们称为临时数据,非临时数据是永远不会被剔除的,即便物理内存不够,导致swap也不会剔除任何非临时数据(但会尝试剔除部分临时数据)

持久化

Memcache 不支持持久化。机器重启数据全部丢失。

Redis 支持持久化。机器重新启动,数据都能重新加载到内存中。当Redis内存达到一定时,将触发swap的操作,将一部分值持久化到磁盘,但是所有的 key的信息都会在内存中

分布式集群

Memcached本身并不支持分布式,因此只能在客户端通过像一致性哈希这样的分布式算法来实现Memcached的分布式存储。集群中单节点之间没有任何交流,也没有备份数据

Redis Cluster采用无中心架构,每个节点都保存数据和整个集群的节点状态。为了保证单点故障下的数据可用性,Redis Cluster引入了Master节点和Slave节点

Memcache 与 Redis选择

Redis

1、多样的数据类型
2、支持事务
3、数据持久化
4、单点故障下的数据可用性

Memcache

1、高性能
2、稳定的高内存利用率
3、增加节点简单
4、数据安全性保证,ssl传输
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注