近来在吸收新知识和复习以前所学,但一直没有好好梳理一下。为了将“内化”所学,也是时候做个总结了。Redis和Memcache是当前缓存层讨论的最多解决方案。我们需要根据实际的使用场景来决定选择哪个。
Redis和Memcache本质上都是基于k/v实现的缓存,但是Memcache正如其名,依赖于内存,不支持数据的持久化,服务器关闭后数据丢失。而Redis在很多方面具备数据库的特征,或者说就是一个数据库系统,可以通过RDB快照或者AOF日志将数据持久化到磁盘,支持master-slave机制的数据备份;
在存储小于100k的数据,Redis具有性能上的优势,而数据量大于100k,Memcache性能更好;
Redis只支持单线程请求,一个Redis进程只使用单核,所有命令串行执行,并发情况下不需要考虑数据一致性。但是可以通过多个Redis进程使用多核。而Memcache可以充分发挥多核优势,单实例吞吐量极高,可以达到几十万QPS;
在内存利用率上Memcache更高,但如果Redis使用hash结构做k/v存储,由于其组合式的压缩,内存利用率会高于Memcache;
支持数据类型上,Memcache只支持k/v类型的数据,而Redis还支持list,set,zset,hash等数据结构,并且Redis支持服务器端的数据操作,而Memcache需要将数据拿到客户端进行修改再set回去,大大增加了网络IO和数据的体积,如果需要缓存能进行更复杂的数据结构和操作,那么Redis更适合。