1、Memcached简介算法
memcached是高性能的分布式内存缓存服务器。它经过缓存数据库查询结果,减小数据库访问次数,以提升动态Web应用的速度、提升可扩展性。与其相似常见的还有Redis。Memcached基于一个存储键/值(K/V)对的hashmap。客户端能够用任何语言来编写,并经过memcached协议与守护进程通讯。数据库
memcached的API使用32位元的循环冗余校验(CRC-32)计算键值后,将资料分散在不一样的机器上。当表格满了之后,接下来新增的资料会以LRU机制替换掉。缓存
2、Memcached的分布式算法服务器
一、余数哈希(余数计算分散):数据结构
原理:根据服务器台数的余数进行分散:先求得键(key)的整数哈希值( int hashCode ),经过Hash函数把key转化成整数后,再用这个哈希值除以服务器台数,根据余数选择服务器。多线程
举例:总共10台服务器(编号为0~9),先获取数据的key的整数哈希值:hashCode=hash(key)=13 ,而后除以服务器总台数,mod 10(13%10)=3,即选择编号为3的服务器进行存储。分布式
缺点:当添加或减小服务器后要进行重哈希,这样会致使原来的服务器序号变了,则可能出现求得的余数也改变,致使Memcached命中率降低,致使更多地访问数据库服务器去调数据,增长了数据库服务器的负载。memcached
二、一致性哈希:函数
原理:性能
容错性:对下图,当Server3服务器故障时,数据的存储指示D发生了改变,存放在了Server2上边。系统的存储数据变化最少(由于是数据是顺时针寻找服务器存储,因此D位置数据找到的是Server2服务器)
扩展性:假设增长服务器Server4,按规则放在BC中间,那么只是B存储在Server4上边了,总体的影响只是发生在了新增节点的区间部分。
3、Memcached的数据清除算法
4、工做流程
5、Memcached 和 Redis的区别?
一、数据存储位置:Redis支持数据的持久化,能够将内存中的数据保持在磁盘中,重启的时候能够再次加载进行使用。而Memecache把数据所有存在内存之中;
二、速度上:Redis的速度比memcached快不少;
三、多线程:Memcached支持多线程,而Redis使用单线程的IO复用模型;
四、支持的数据类型:Memcached仅支持简单的数据类型,想要存入复杂的数据类型必须把复杂的数据类型转变成简单的数据类型。Redis不只仅支持简单的k/v类型的数据,同时还提供string(字符串)、list(链表)、set(集合)、zset(sortedset --有序集合)和hash(哈希类型)等数据结构的存储。