Redis 和 Memcached
两者都是非关系型内存键值数据库,主要有以下不同:
- 数据类型
- Memcached 仅支持字符串类型
- 而 Redis 支持五种不同的数据类型,可以更灵活地解决问题。
- 数据持久化
- Redis 支持两种持久化策略:RDB 快照和 AOF 日志
- 而 Memcached 不支持持久化。
- 分布式
- Memcached 不支持分布式,只能通过在客户端使用一致性哈希来实现分布式存储,这种方式在存储和查询时都需要先在客户端计算一次数据所在的节点。
- Redis Cluster 实现了分布式的支持。
- 数据存储
- Redis和Memcached都是将数据存放在内存中,都是内存数据库。
- 不过memcached还可用于缓存其他东西,例如图片、视频等等。memcached把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小;
- redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化(RDB、AOF),而Memcached不支持持久化。同时Redis并不是所有的数据都一直存储在内存中的,当物理内存用完时,Redis可以将一些很久没用到的value交换到磁盘,但memcached超过内存比例会抹掉前面的数据。
- 内存管理机制
- 在 Redis 中,并不是所有数据都一直存储在内存中,可以将一些很久没用的 value 交换到磁盘
- 而 Memcached 的数据则会一直在内存中。
- Memcached 将内存分割成特定长度的块来存储数据,以完全解决内存碎片的问题。但是这种方式会使得内存的利用率不高,例如块的大小为 128 bytes,只存储 100 bytes 的数据,那么剩下的 28 bytes 就浪费掉了。
- 线程数
- Memcache支持多核多线程
- Redis单线程操作