redis和memcached
Redis
- 主从配置(主从复制不会阻塞master、)
- bind 192.168.1.2(请修改成本机的IP地址,要不然,客户端无法进行访问)
- slaveof 192.168.1.1 6379(映射到主服务器上)
- 可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化
- 还提供list,set,hash等数据结构的存储。
- RDB文件:不能保证最新
- 持久化机制:AOF日志(appendfsync有三个设置项:no、everysec、always)
- 在Redis Cluster中,每个Master节点都会有对应的两个用于冗余的Slave节点。这样在整个集群中,任意两个节点的宕机都不会导致数据的不可用。当Master节点退出后,集群会自动选择一个Slave节点成为新的Master节点。
- 数据操作方面,redis更好一些,较少的网络IO次数,单线程的IO复用模型
Memcached
- memcached单个缓存值限制为1M(1000000bytes),缓存的value必须可以序列化,必须考虑网络IO及序列化、反序列化的开销。应该尽量规避某些特定数据结构,比如Hashtable,DataTable
- memcache的keys限制为250 bytes,设为 距离当前时间的时间间隔 时不能大于 2592000(30天)
- 基于libevent(它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥O(1)的性能。 memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能)的事件处理
- memcached不互相通信的分布式: 一致性哈希算法(Consistent Hashing),参考http://zhihuzeye.com/archives/2361
- Memcached的高性能源于两阶段哈希(two-stage hash)结构。Memcached就像一个巨大的、存储了很多<key,value>对的哈希表。通过key,可以存储或查询任意的数据。 客户端可以把数据存储在多台memcached上。当查询数据时,客户端首先参考节点列表计算出key的哈希值(阶段一哈希),进而选中一个节点;客户端将请求发送给选中的节点,然后memcached节点通过一个内部的哈希算法(阶段二哈希),查找真正的数据(item)并返回给客户端。从实现的角度看,memcached是一个非阻塞的、基于事件的服务器程序。
- 内存管理机制:Slab Allocation
- 在并发场景下,用cas保证一致性。多线程,非阻塞IO复用的网络模型
- 通过Magent缓存代理,防止单点现象。
- 在并发场景下,用cas保证一致性 http://langyu.iteye.com/blog/680052

浙公网安备 33010602011771号