Redis和memched有什么区别?为什么单线程的Redis比多线程的Memched效率要高?

Redis和memched有什么区别?为什么单线程的Redis比多线程的Memched效率要高?

先说一下他俩之间的区别,后面说的是单线程的Redis比多线程的Memched效率要高的原因。

区别:

数据支持类型:

Redis:

String(字符串):key-value 类型

Hash(哈希):字典(hashmap) Redis的哈希结构可以使你像在数据库中更新一个属性一样只修改某一项属性值

List(列表):实现消息队列

Set(集合):利用唯一性

Sorted Set(有序集合):可以进行排序 可以实现数据持久化

Bitmaps(位图)

HyperLogLog、Geo(地理信息定位)
Memched:简单的key/value数据类型

数据持久性:

Redis:Redis通过RDB(Redis DataBase)与AOF(Append Only File)持久化,可以将内存中的数据保存到硬盘中,然后重启之后在读取数据。

这里说明一下RDB和AOF的原理:

RDB:是在达到指定的时间或者操作次数后,自动将在内存中的数据写入磁盘(数据恢复时一致性和完整性较差,因为也许最后一次备份前就宕机了,适合数据量较大的数据恢复时候使用)

AOF:是日志形式,当数据写入内存中的时候,在日志文件下记录下所有写操作。(数据量较大时,数据的恢复缓慢)

注意:如果不需要持久化的功能,可以关闭。如果想要达到持久化的效果,建议两者都使用(RDB,AOF)

Memched:不支持数据的持久性的存储

内存利用情况:

使用简单的key-value存储的话,Memcached的内存利用率更高。

而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩(用哈希编码得到key值 查找再用产生哈希编码的算法,算回去,即可得到value,不用遍历),其内存利用率会高于Memcached。

Memcached默认使用Slab Allocation机制管理内存,主要思想是按照原先预定的大小分配内存大小,当客户端发过来数据的时候会选择一个最适合的地方给它储存,好处是效率高,

不会造成内存碎片,但是不好的一点就是分配的内存大小124字节,传进来的大小是100字节,那么24字节的内存也就浪费了。

事务:

Redis提供事务

menched不提供

线程:

Redis 单线程

menched多线程

性能区别:

Redis使用单核,

Memcached可以使用多核

在处理小的文件的时候Redis会比Memcached有更高的效率,但是在100KB以上的时候,Memcached的效率就会比Redis更高一点