Redis 相对 Memcached 来说功能和特性上的优势已经很明显了。而对于性能,Redis 作者的说法是平均到单个核上的性能,在单条数据不大的情况下 Redis 更好。为什么这样说呢,理由就是 Redis 是单线程运行的。
因为是单线程运行,所以和 Memcached 的多线程相比,整体性能肯定会偏低。
因为是单线程运行,所以 IO 是串行化的,网络 IO 和内存 IO,因此当单条数据太大时,由于需要等待一个命令的所有 IO 完成才能进行后续的命令,所以性能会受影响。
而就内存使用上来说,目前 Redis 结合了 tcmalloc 和 jemalloc 两个内存分析器,基本上和 Memcached 不相伯仲。如果是简单且有规律的 key value 存储,那么用 Redis 的 hash 结构来做,内存使用上会惊人的变小,优势是很明显的。
和 Memcached 更为接近的是 Redis。它们都是内存型数据库,数据保存到内存中,通过 tcp 直接存取,优势是速度快,并发高,缺点是数据类型有限,查询功能不强,一般用作缓存。
相比 Memcached:
1、Redis 具有持久化机制,可以定期将内存中的数据持久化到硬盘上。
2、Redis 具备 binlog 功能,可以将所有操作写入日志,当 Redis 出现故障,可依照 binlog 进行数据恢复。
3、Redis 支持 virtual memory,可以限定内存使用大小,当数据超过阀值,则通过类似 LRU 的算法把内存中的最不常用的数据保存到硬盘的页面文件中。
4、Redis 原生支持的数据类型更多,使用的想象空间更大。