Redis与memcached区别:
Redis并不是所有数据存在内存中,这是最大的区别。
- memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后将连接描述字pipe传给worker线程进行读写IO,Redis使用单线程复用IO模型,封装了一个简单的AeEvent事件处理框架,实现了epoll,kqueue,select,但单线程模型会严重影响整体吞吐量,整个IO调度是阻塞的。
- memchached使用预分配内存池的方式,使用slab和chunk来管理内存,redis使用现场申请内存来存放数据,并很少使用free-list方式来优化内存分配,会产生内存碎片,会把存储命令参数和过期数据单独放在一起,称为临时数据。非临时数据永远不会被删除,故redis适合存储而不是cache
- memcached提供了cas命令,可以保证多个并发访问操作同一行数据一致性问题,redis没有,但是提供事务功能,可以保证命令原子性。
- memcached只支持key-value存储,redis还支持list,set,hash,sorted set等数据结构
- redis更多场景作为memcached替代者,当存储数据不能被删除时,redis更加合适。