失效链接处理 |
MemCache预研报告v2.1 PDF 下载
本站整理下载:
提取码:hci6
相关截图:
主要内容:
第3章 背景介绍
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
Memcache是danga的一个项目,最早是为LiveJournal服务的,最初为了加速LiveJournal访问速度而开发的,后来被很多大型的网站采用。
使用Memcache的网站一般流量都是比较大的,为了缓解数据库的压力,让Memcache作为一个缓存区域,把部分信息保存在内存中,在前端能够迅速的进行存取。那么一般的焦点就是集中在如何分担数据库压力和进行分布式,毕竟单台Memcache的内存容量的有限的。
Memcached是该系统的主程序文件,以守护进程方式运行于一个或多个服务器中,随时会接收客户端的连接和操作,使用共享内存存取数据。
Memcached特征:
协议简单
它是基于文本行的协议,直接通过telnet在memcached服务器上可进行存取数据操作
基于libevent事件处理
Libevent是一套利用C开发的程序库,它将BSD系统的kqueue,Linux系统的epoll等事件处理功能封装成一个接口,与传统的select相比,提高了性能。
内置的内存管理方式
所有数据都保存在内存中,存取数据比硬盘快,当内存满后,通过LRU算法(Least Recently Used,最近最少使用。LRU算法的基本概念:当分配的内存可用空间不足时,它尽可能地先保留最常用的数据,将最近没有使用的数据移出内存,释放出的空间来存储其它的数据)自动删除不使用的缓存,但没有考虑数据的容灾问题,重启服务,所有数据会丢失。
分布式
各个memcached服务器之间互不通信,各自独立存取数据,不共享任何信息。服务器并不具有分布式功能,分布式部署取决于memcache客户端。
第4章 技术预研目标
所有的数据基本上都是保存在数据库当中的,每次频繁的存取数据库,导致数据库性能急剧下降,无法同时服务更多的用户,所以让Memcache来分担数据库的压力。
操作流程如下图所示
1)检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作,路径操作为①②③⑦。
2)如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现),路径操作为①②④⑤⑦⑥。
3)每次更新数据库的同时更新memcached中的数据,保证一致性。
4)当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。
第5章 技术预研取得的工作成果
5.1 MemCached安装
Memcached服务器端安装分Windows环境和Linux环境
5.1.1 Windows环境下的安装
5.1.1.1 安装MemCached
1)下载memcached的windows稳定版,下载地址为:http://splinedancer.com/memcached-win32/,解压放某个盘下面,比如在c:\memcached;
2)在CMD下输入c:\memcached\memcached.exe -d install安装;
3)再输入c:\memcached\memcached.exe -d start启动。
注意:以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。
5.1.1.2 常用设置
-p <num>:监听的端口,默认为11211
-l <ip_addr>:连接的IP地址,默认是本机
-d start:启动memcached服务
-d restart:重起memcached服务
-d stop|shutdown:关闭正在运行的memcached服务
-d install:安装memcached服务
-d uninstall:卸载memcached服务
-u <username>:以<username>的身份运行 (仅在以root运行的时候有效)
-m <num>:最大内存使用,单位MB,默认64MB
-M:内存耗尽时返回错误,而不是删除项
-c <num>:最大同时连接数,默认是1024
-f <factor>:块大小增长因子,默认是1.25
-n <bytes>:最小分配空间,key+value+flags默认是48
-h:显示帮助
5.1.2 Linux环境下的安装
在liunx环境下安装需要用到libevent类库,用于Socket的处理,所以还需要安装libevent(如果系统已经安装了libevent,可以不用安装)。
|