【学习背景】 在ITOO4.0的时候,自己听了师哥师姐的技术分享,从那开始,Memcached 就留在脑海中了。现在,我们开始了ITOO4.1,在师父的指导下,开始缓存的学习。自然地,我第一时刻想到的便是Memcached。 【学习阶梯】 在正是进入Memcached之前,自己先了解了些关于“缓存”的知识。 一.什么是缓存 用来暂时存储数据,避免频繁连接数据库或磁盘文件。一般来说,缓存比数据库或磁盘容量更小,但存取速度快。 二.缓存的作用 存储频繁访问的数据;临时存储耗时的计算结果;内存缓存减少磁盘IO 三.缓存的类型 1.客户端缓存 cookie缓存是属于一种客户端缓存,也就是将数据暂时存储在浏览器中,页面一旦关闭,这一类缓存是无法获取的,并且有的用户浏览器可能选择的不保存cookie。 2.服务端缓存 session缓存和Memcached分布式缓存都是属于一种服务端缓存,它们之间的区别在于session缓存用户与数据间存在绑定,就拿登录淘宝来说,用户登录后,如果将用户信息存在session中,用户有哪些浏览记录,这些数据都是根据该用户下的sessionID去得到的,从而数据和用户之间是绑定着的。而Memcached,是一种无状态的缓存,即用户和数据之间并没有绑定关系。 有了这些基本知识的了解,下面便开始引入Memcached。 一.Memcached的由来 许多web应用将数据保存在关系型数据管理系统中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大,访问的集中,就会出现负担加重、数据库响应恶化、网站显示延迟等影响。 这时,Memcached就大显身手了。Memcached是高性能的分布式内存缓存服务器。 二.Memcached的概述 用于动态web应用以减轻数据库负载。通过在内存中缓存数据和对象减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。基于一个存储键/值对的hashmap。 三.Memcached的存储原理 Memcached的存储原理,类似于操作系统中分配内存的原理。涉及到slab,page,chunk三个概念。chunk为固定大小的内存空间,page对应实际的物理空间,同样大小的chunk是slab。采用最近最少的算法,如果某一slab的内存容量满了,那么会将这一slab中的最近的最少使用的记录删除。而要存储的数据是根据hasp算法,得到改数据应该是存储在哪个安装了Memcached的服务器地址的哪一个slab中。而删除容量也是以单个slab来说,并不是整个slab。 四.Memcached的“分布式”理解 分布式缓存Memcached,此"分布式"并非彼"分布式"。分布式是指不同的计算机可以访问同一服务器上的应用程序。而Memcached的分布式是指不同的数据是分布存储在不同的服务器上。假设有三台Memcached服务器,应用程序要保存“user1”,“user2”,“user3”,“user4”等数据。它是先添加“user1”,根据key值去选定保存在哪一服务器上,其它数据也同样这样一一添加。 五.Memcached的优势与不足 优势 支持分布式扩展;内存可以无限制扩大;分布式使用简单,可以在客户端直接设置多个memcached服务器。 不足 1.数据保存在内存当中,一旦服务进程重启,数据会全部丢失 对策:可以采取更改memcached的源代码,增加定期写入硬盘的功能。 2.memcached以root权限运行,本身没有任何权限管理和认证功能,安全性不足。 对策:可以将memcached服务绑定在内网IP上,通过防火墙进行防护。 六.Memcached的安装与使用 1.下载Memcached,解压得到memcached.exe程序和pthreadGC2.dll文件 2.在dos窗口输入命令:先转入到程序所在文件夹,然后输入命令 memcached.exe -d install 进行安装 3.输入命令memcached.exe -d start 进行启动(默认分配内存64M,使用11211端口) 4.输入命令Telnet 127.0.0.1 11211连接上Memcached,然后直接输入stats可以得到当前Memcached的状态。 安装使用注意点: 1.安装需要以管理员身份运行。 2.memcached应用程序不要放在带有中文或特殊字符的目录下,可能无法识别,安装失败。 3.检查是否安装成功的方法:在计算机属性中找到服务,查看是否有memcached那一项,如下图,有的话,则表示安装成功。 4.检查memcached安装并且启动的方法:在dos窗口下输入 netstat -an,查看是否有端口为11211的地址在监听,如下图,有的话,则表示启动成功。 5.在使用Memcached时,如果输入telnet 后报telnet不是内部或外部命令的时候,做如下操作。 【学习实践】 在ITOO项目中,很多系统模块都有应用到Memcached,下面就来看看它是如何应用的。 首先,需要在配置文件中进行Memcached的配置,即选择Memcached服务器的IP地址。 在项目中,底层封装好了一个Memcachedhelper类,其中包括添加,获取,替代,删除,序列化与反序列化等方法。在客户端,我们只需要添加引用即可。 最后,在前台Controller中调用方法即可,示例如下图所示: 【学习感悟】 最近的学习,都会给师父发学习日报,一方面让师父看看自己的学习收获,一方面也可以让师父看看自己学习的理解程度,感觉这样的学习效果也是有很大的进步。 其实,不论什么知识,没有什么懂与不懂,只是要看自己有没有真正接触到,有没有真正花时间去学习过。事实上,只要自己静下心,踏踏实实,加上交流,阅读,都可以一点点积累到的。