Memcached(Window安装和简介)
来源:互联网 发布:chrome 定时执行js 编辑:程序博客网 时间:2024/05/17 22:18
1、简介
Memcached是一个高性能的分布式内存对象缓存系统,用于动态web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,
从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon)是用C写的,但是客户端可以用任何语言来编写,并通过Memcached协议与守护进程通信。
特征: memcached作为高速运行的分布式缓存服务器,具备以下特点:
1、协议简单(服务器客户端通信不使用复杂的xml格式,而是使用简单的基于文本协议(其包括文本格式和二进制格式),可以在windows使用telnet连接服务器操作。)
2、基于libevent的事件处理(memcached使用这个libevent程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥O(1)的性能因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。)
3、内置内存存储方式(因保存的数据都是存储在其内置的内存存储空间中,所以重启系统会使数据丢失。当内容容量到达指定值之后,就基于LRU(least recently used)算法自动删除不使用的缓存,memcached设计没有过多考虑数据永久性问题)
4、Memcached不互相通信的分布式,memcached尽管是"分布式"缓存服务器,但服务器并没有分布式功能。各个memcached不会互相通信以共享信息。他的分布式主要是通过客户端实现的。(服务器维护了一个键值关系的数据表,服务器之间相互独立,互相之间不共享数据也不做任何通讯操作,客户端需求知道所有服务器,并自行负责管理数据在各个服务器之间的分配)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
功能:MemAdmin(图形化管理工具)是一款可视化的Memcached管理与监控工具,使用PHP开发,体积小,操作简单。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
最近的memcached默认情况下采用了名为Slab Allocatoion的机制分配管理内存。在改机制出现以前,内存的分配是通过对所有记录简单地进行malloc和free来进行的。但是这中方式会导致内存碎片,加重操作系统内存管理器的负担。
Slab Allocator的基本原理是按照预先规定的大小,将分配的内存分割成特定长度的块,已完全解决内存碎片问题。SlabAllocation
而且slab allocator 还有重复使用已分配内存的目的。也就是说,分配到的内存不会释放,而是重复利用。
Slab Allocation 的主要术语
-
Page:分配给Slab 的内存空间,默认是1MB。分配给Slab 之后根据slab 的大小切分成chunk. -
Chunk :用于缓存记录的内存空间。 -
SlabClass:特定大小的chunk 的组。
在Slab 中缓存记录的原理
Memcached根据收到的数据的大小,选择最合适数据大小的Slab (图2)memcached中保存着slab内空闲chunk的列表,根据该列表选择chunk,然后将数据缓存于其中。
Memcached在数据删除方面有效里利用资源
Memcached删除数据时数据不会真正从memcached中消失。Memcached不会释放已分配的内存。记录超时后,客户端就无法再看见该记录(invisible透明),其存储空间即可重复使用。
LazyExpriationmemcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术称为lazyexpiration.因此memcached不会再过期监视上耗费CPU时间。
对于缓存存储容量满的情况下的删除需要考虑多种机制,一方面是按队列机制,一方面应该对应缓存对象本身的优先级,根据缓存对象的优先级进行对象的删除。
LRU:从缓存中有效删除数据的原理
Memcached会优先使用已超时的记录空间,但即使如此,也会发生追加新纪录时空间不足的情况。此时就要使用名为LeastRecently Used(LRU)机制来分配空间。这就是删除最少使用的记录的机制。因此当memcached的内存空间不足时(无法从slabclass)获取到新空间时,就从最近未使用的记录中搜索,并将空间分配给新的记录。Memcached 分布式缓存实现原理
memcached分布式原理
memcached不相互通信,那么memcached是如何实现分布式的呢?memcached的分布式实现主要依赖客户端的实现:
当数据到达客户端,客户端实现的算法就会根据“键”来决定保存的memcached服务器,服务器选定后,命令他保存数据。取的时候也一样,客户端根据“键”选择服务器,使用保存时候的相同算法就能保证选中和存的时候相同的服务器。
余数计算分散法
余数计算分散法是memcached标准的memcached分布式方法,算法如下:
CRC($key)%N
该算法下,客户端首先根据key来计算CRC,然后结果对服务器数进行取模得到memcached服务器节点,对于这种方式有两个问题值得说明一下:
- 当选择到的服务器无法连接的时候,一种解决办法是将尝试的连接次数加到key后面,然后重新进行hash,这种做法也叫rehash。
- 第二个问题也是这种方法的致命的缺点,尽管余数计算分散发相当简单,数据分散也很优秀,当添加或者移除服务器的时候,缓存重组的代价相当大。
Consistent Hashing算法
Consistent Hashing算法描述如下:首先求出memcached服务器节点的哈希值,并将其分配到0~2^32的圆上,这个圆我们可以把它叫做值域,然后用同样的方法求出存储数据键的哈希值,并映射到圆上。然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上,如果超过0~2^32仍找不到,就会保存在第一台memcached服务器上:
memcachd基本原理
再抛出上面的问题,如果新添加或移除一台机器,在consistent Hashing算法下会有什么影响。上图中假设有四个节点,我们再添加一个节点叫node5:
添加了node节点之后
node5被放在了node4与node2之间,本来映射到node2和node4之间的区域都会找到node4,当有node5的时候,node5和node4之间的还是找到node4,而node5和node2之间的此时会找到node5,因此当添加一台服务器的时候受影响的仅仅是node5和node2区间。
优化的Consistent Hashing算法
上面可以看出使用consistent Hashing最大限度的抑制了键的重新分配,且有的consistent Hashing的实现方式还采用了虚拟节点的思想。问题起源于使用一般hash函数的话,服务器的映射地点的分布非常不均匀,从而导致数据库访问倾斜,大量的key被映射到同一台服务器上。为了避免这个问题,引入了虚拟节点的机制,为每台服务器计算出多个hash值,每个值对应环上的一个节点位置,这种节点叫虚拟节点。而key的映射方式不变,就是多了层从虚拟节点再映射到物理机的过程。这种优化下尽管物理机很少的情况下,只要虚拟节点足够多,也能够使用得key分布的相对均匀。
总结
本文介在理解缓存基本概念的情况下介绍了memcached的分布式算法实现原理,memcached的分布式是由客户端函数库实现的。
缓存多副本
缓存多副本主要是用于在缓存数据存放时存储缓存数据的多个副本,以防止缓存失效。缓存失效发生在以下几种情况:- 1.
缓存超时被移除(正常失效) - 2.
缓存由于存储空间限制被移除(异常失效) - 3.
由于缓存节点变化而导致的缓存失效(异常失效)
在缓存多副本的情况下,需要重新考虑缓存的分布式分布策略。其次缓存的多个副本实际本身是可能的多个读的节点,可以做为分布式的并行读,这是另外一个可以考虑的问题。
缓存数据的一致性问题
缓存数据尽量只读,因此缓存本身是不适合大量写和更新操作的数据场景的。对于读的情况下,如果存在数据变化,一种是同时更新缓存和数据库。一种是直接对缓存数据进行失效处理。- 1.
2、下载memcached_en32or64
- Memcached(Window安装和简介)
- window下memcached安装
- window下memcached安装
- window下安装memcached
- Window 下安装 Memcached
- Window 下安装 Memcached
- Window 下安装 Memcached
- Memcached的简介、原理和安装说明
- Memcached之Window和Linux安装(1)
- memcached简介及安装
- Memcached简介与安装
- memcached简介与安装
- memcached window版服务器端安装
- memcached 缓存window下安装
- Window 下安装 Memcached方法~
- memcached简介和使用
- memcached 的简介、安装、命令
- 一.memcached简介and安装
- UOJ#207 共价大爷游长沙
- WEB前端 | JS基础——(9)JS事件01
- 1、空类的sizeof为1,为什么?
- web(三)、Servlet(二)
- hibernate入门第一课 认识Hibernate
- Memcached(Window安装和简介)
- JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jsta
- 关于数据结构和面向对象
- gcc-4.9.0手工编译安装
- vector3.forward和transform.forward
- Filter执行流程
- POJ 2141 模拟
- 研发主管的烦恼:周一早晨延迟的项目会议
- Java注解