####安装
Memcached需要先安装libevent库,然后获取源码编译安装。
Redis编译安装即可
####配置
Memcached配置详解
Redis配置详解
####使用
Memcached启动命令:memcached -d -m 内存大小(M) -u 运行用) -p 端口号 -c 最大并发连接数 -P /tmp/memcached.pid
Memcached访问:使用telnet即可
Redis启动:redis-server redis.conf
Redis访问:redis-cli -p 端口号
####区别
1)网络IO模型
Memcached使用多线程,非阻塞的IO复用网络模型。其使用libevent封装的事件库。
Redis使用单线程的IO复用网络模型。自己封装了一个简单的AeEvent事件处理框架。Redis提供了一些简单的计算功能,比如排序、聚合,但是由于是单线程的,所以会严重影响整体吞吐量。
2)内存管理方面
Memcached使用预分配的内存池的方式。使用slab和大小不同的chunk来管理内存,Item根据大小选择合适的chunk存储,内存池的方式可以省去申请/释放内存的开销,并且能减小内存碎片产生,但这种方式也会带来一定程度上的空间浪费,并且在内存仍然有很大空间时,新的数据也可能会被剔除。
Redis使用现场申请内存的方式来存储数据。并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片,Redis跟据存储命令参数,会把带过期时间的数据单独存放在一起,并把它们称为临时数据,非临时数据是永远不会被剔除的,即便物理内存不够,导致swap也不会剔除任何非临时数据(但会尝试剔除部分临时数据),这点上Redis更适合作为存储而不是cache。
3)数据一致性问题
Memcached提供了CAS命令,可以保证并发访问操作同一份数据的一致性问题。
Redis提供了事务功能,可以保证一串命令的原子性。
4)存储方式
Memcached提供简单的key-value存储,不支持枚举,不支持持久化和复制功能。
Redis除了简单的key/value外,还支持list/set/sorted set/hash等数据结构。Redis同时支持持久化和复制功能。
5)其它方面
Redis提供聚合计算、发布订阅功能、脚本处理等功能。但是同样存在一些局限性,比如pubsub功能,这个实际是没有任何持久化支持的,消费方连接闪断或重连之间过来的消息是会全部丢失的,又比如聚合计算和scripting等功能受Redis单线程模型所限,是不可能达到很高的吞吐量的,需要谨慎使用。