区别
- IO模型 - memcache:多线程IO多路复用(事件驱动),redis:单线程IO多路复用(事件驱动,单线程模型实际会严重影响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的)
- 内存分配 - memcache:使用预分配的内存池的方式(slab,chunk),Redis:使用现场申请内存的方式来存储数据,会在一定程度上存在内存碎片。
- 数据一致性 - memcache:使用cas保证数据一致性,redis:使用事务操作
- 功能 - memcache:基本只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能,redis:除key/value之外,还支持list,set,sorted set,hash等众多数据结构,提供了KEYS进行枚举操作,但不能在线上使用,同时提供了持久化和复制等功能
- 分布式锁 - memcache:原子操作add()能够设置过期时间,redis:需要先set()再expire(),一旦宕机被打断,会导致死锁
使用场景
- redis使用最佳方式是全部数据in-memory。
- redis更多场景是作为memcache的替代者来使用。
- 当需要除key/value之外的更多数据类型支持时,使用redis更合适。
- 当存储的数据不能被剔除时,使用redis更合适。