.Net缓存小结(下)

Memcached分布式缓存

概念

Memcached 是一个高性能的分布式内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

具有以下特点

.协议简单:

使用简单的基于文本行的协议,没有使用复杂的XML协议。因此,通过telnet也能在memcached上存取数据;

.基于libevent的事件处理:

Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。

.内置内存存储方式:

为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中;由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used 近期最少使用算法)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。

.服务端互不相通信的分布式

每个服务器端都是独立存在的,他们相互之间没有通讯,数据的分布存储完全取决于客户端的实现。memcached的集群非常简单,我们的应用程序只需要将数据请求给 memcached客户端,在memcached客户端中会通过一个分布式算法(一致性Hash算法)从memcached服务器列表中计算一个 memcached服务器的地址(如果是读请求,则根据Key在分布式算法中得到缓存有该Key的memcached服务器信息),然后客户端将数据 (Key/Value对)传递给计算出来的memcached服务器(如果是读请求,则从计算出来的memcached服务器中读取含有指定Key的数据);

核心:分布、存储、删除

1.memcached采用一致性Hash算法来分配缓存数据到服务器集群。具体过程如下:

  首先构造一个长度为0~2^32(2的32次幂)个的整数环(又称:一致性Hash环),根据节点名称的Hash值将缓存服务器节点放置在这个Hash环中。

  其次客户端会计算出缓存数据Key值的Hash值,根据计算得到的Hash值对应到Hash环上

  最后在Hash环上顺时针查找距离这个Key的Hash值最近的缓存服务器节点,完成KEY到服务器的Hash映射查找。

  如果超过232仍然找不到服务器,就会保存到第一台memcached服务器上

  当增加或减少服务器时,Hash环上的服务器节点会在原来的基础上增加去除,而不是全部重新均匀分布,这样最大限度地减小服务器增减时的缓存重新分布

2.memcached默认情况下采用了名为Slab Allocator的机制分配、管理内存。基本原理是按照预先规定的大小,将分配的内存分割成特定长度的块, 以完全解决内存碎片问题。具体如下:

  Slab Allocator将分配的内存(Page)分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(Slab Class/chunk的集合)来存放缓存数据。

  Page:分配给Slab的内存空间,默认是1MB。分配给Slab之后根据slab的大小切分成chunk。

  Chunk:用于缓存记录的内存空间。

  Slab Class:特定大小的chunk的组。

3.memcached是缓存,所以数据不会永久保存在服务器上。删除机制如下:

  透明(invisible):memcached不会释放已分配的内存。记录超时后,客户端就无法再看见该记录,其存储空间即可重复使用。

  惰性(Lazy Expiration):memcached内部不会监视记录是否过期,而是在获取时查看记录的时间戳,检查记录是否过期。因此,memcached不会在过期监视上耗费CPU时间。

  LRULeast Recently Used): memcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况, 此时就要使用LRU机制来分配空间。当memcached的内存空间不足时(无法从slab class 获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。

  PS: memcached启动时通过“-M”参数可以禁止LRU  memcached.exe -M -m 1024 (小写的“-m”选项是用来指定最大内存大小的。不指定具体数值则使用默认值64MB。)  这样,当指定的内存用尽时,不再分配控件 报错。

windows下的安装与VS中的使用

首先是安装服务

1.网上下载 window版 memcached.exe 文件

2.将下载好的exe文件 放到某一个盘符里,方便命令找到

3.打开cmd 打开到存放exe的文件夹下 命令安装运行服务

4.打开任务管理器查看服务是否安装运行

安装好服务之后接下来就是客户端了

1.首先得下载Memcached客户端有.Net版

2.在网站中添加引用

3.配置服务器地址和端口

4.使用memcached存取数据

参考文章(特别给力):

http://kb.cnblogs.com/page/42731/

http://www.cnblogs.com/edisonchou/p/3855517.html

posted @ 2015-06-19 08:55  at小怪兽  阅读(213)  评论(0编辑  收藏  举报