相同点
都是基于内存的数据存储系统
redis 和 memcached 的区别
1.1redis 支持 丰富的数据类型 string hash list set 有序集合
1.2.memcached 只支持 string
2.1 redis支持持久化操作
RDB快照
Redis支持将当前数据的快照存成一个数据文件的持久化机制,即RDB快照。
RDB有他的不足,就是一旦数据库出现问题,那么我们的RDB文件中保存的数据并不是全新的,从上次RDB文件生成到Redis停机这段时间的数据全部丢掉了。在某些业务下,这是可以忍受的。
AOF日志
AOF日志的全称是append only file,它是一个追加写入的日志文件。
与一般数据库的binlog不同的是,AOF文件是可识别的纯文本,它的内容就是一个个的Redis标准命令。
对于一般性的业务需求,建议使用RDB的方式进行持久化,原因是RDB的开销并相比AOF日志要低很多,
对于那些无法忍数据丢失的应用,建议使用AOF日志。
2.2 memcached 不支持
3.1 内存的使用效率对比
如何是使用简单的key-value存储 memcached的利用率更高,但如果 redis 采用 hash 存储,由于
其组合式的压缩,其内存利用率会高于 memcached
4.性能对比
redis只使用单核,memcached是多核,所以平均每个核上 redis在存储小数据时性能更高。
而在100k以上的数据时, memcached的性能会高于 redis
5.内存的管理机制不同
在Redis中,并不是所有的数据都一直存储在内存中的。
当物理内存用完时,Redis可以将一些很久没用到的value交换到磁盘。
Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,
Redis根据“swappability = age*log(size_in_memory)”计算出哪些key对应的value需要swap到磁盘。
然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。
这种特性使得Redis可以保持超过其机器本身内存大小的数据。
Memcached默认使用Slab Allocation机制管理内存
其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。
Slab Allocation机制只为存储外部数据而设计,也就是说所有的key-value数据都存储在Slab Allocation系统里,
Memcached的内存管理制效率高,而且不会造成内存碎片,但是它最大的缺点就是会导致空间浪费。
6.集群管理不同
Memcached是全内存的数据缓冲系统
Redis虽然支持数据的持久化,但是全内存毕竟才是其高性能的本质。
Memcached本身并不支持分布式,因此只能在客户端通过像一致性哈希这样的分布式算法来实现
Redis更偏向于在服务器端构建分布式存储。最新版本的Redis已经支持了分布式存储功能。
一起干同样的事叫集群,分工合作的叫分布式