• 1. 为大型网站提速 --memcached缓存技术编辑:彬文
  • 2. 学习内容 memcached基本概念 使用memcached给我们带来什么好处? 快速入门实例 memcached机制的深入了解 将memcached应用到项目中
  • 3. Memcached概念 ■ memcached基本概念 Memcached是danga的一个项目,最早是LiveJournal 服务的,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。 官方网站: www.danga.com 和 memcached.org Memcached是一个高性能的分布式的内存对象缓存系统,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。(注: 摘自百度全科)
  • 4. Memcached--谁在使用
  • 5. Memcached--使用好处 请大家先看一个问题,这个问题在大并发,高负载的网站中必须 考虑!大家思考如何让速度更快。三种方案的比较 1. 数据库 2. 页面静态化 3. memcached 缓存技术怎么处理: 1、传统方法 2、模拟cache的方法
  • 6. Memcached--原理示意图 简单的说: memcached就是在内存 中维护一张巨大的hash表,通过自己 的一套算法来维护数据的操作,这个 算法比较复杂,这里我们只做简单的 介绍,对我们java程序员而言,重点 掌握如何在项目如何使Memcached 技术. [示意图]
  • 7. Memcached-安装 安装步骤 ①下载memcached软件 ②将memcached软件拷贝到某个目录,最好放在tomcat开发环境目录下,便于管理 ③安装 memcached.exe –d install [卸载使用 memcached.exe -d uninstall] ④启动 memcached 服务 (1)直接通过界面启动该服务 (2)在控制台下启动 memcached.exe –d start [命令一览表] ⑤查看memcached 服务是否启动成功! 默认端口11211* 查看 memcached 可使用命令: memcached.exe -h
  • 8. telnet操作Memcached 许多语言都实现了连接memcached的客户端,其中以Perl、 PHP为主。仅仅memcached网站上列出的语言就有: • Perl • PHP • Python • Ruby • C# • C/C++为了让大家快速体验一下Memcached的使用, 我们先通过一个现成的程序telnet来说明Memcached 的使用,然后我们在讲解如何通过java程序来操作 Memcached,请大家注意体会其用法.
  • 9. telnet操作Memcached 使用Telnet程序(客户端)对Memcached进行CRUD操作(增加、查询、修改、删除操作), 这里我们需要使用到Memcached给我们提供的命令注: Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。
  • 10. java操作Memcached memcached client for javaspymemcachedxmemcachedMemcached服务通过java程序操作Memcached服务几种形式
  • 11. java操作Memcached 三种API比较 1) memcached client for java 较早推出的memcached JAVA客户端API,应用广泛,运行比较稳定。 2) spymemcached 支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常报timeOut等相关异常。 3) xmemcached xmemcached 同样是基于java nio的客户端,java nio相比于传统阻塞io模型来说,有效率高(特别在高并发下)和资源耗费相对较少的优点。传统阻塞IO为了提高效率,需要创建一定数量的连接形成连接池,而nio仅需要一个连接即可(当然,nio也是可以做池化处理),相对来说减少了线程创建和切换的开销,这一点在高并发下特别明显。因此 xmemcached与Spymemcached在性能都非常优秀,在某些方面(存储的数据比较小的情况下)xmemcached比 Spymemcached的表现更为优秀; 特点:高性能、支持完整的协议、支持客户端分布、允许设置节点权重、动态增删节点、支持 JMX、与Spring框架和Hibernate-memcached的集成、客户端连接池、可扩展性好等。 建议 由于memcached client for java发布了新版本,性能上有所提高,并且运行稳定,所以建议使用memcached client for java。
  • 12. java操作Memcached 1.Memcached-Java-Client组件包(java_memcached-release_2.6.2.jar) 下载地址 https://github.com/gwhalin/Memcached-Java- Client/downloads 2.使用java对Memcached进行CRUD操作 [配合Memcached-Java-Client的说明文档] 下载地址 https://github.com/gwhalin/Memcached-Java-Client
  • 13. memcached-client操作 疑问: 如果我们没有客户端文件,我们能不能去操作memcached 内存数据呢? 特点: 1.不需要开启memcache扩展 2.使用fsockopen()套接字连接memcached 3.同样执行执行CRUD
  • 14. Memcached机制深入了解 ①基于c/s架构,协议简单c/s架构,此时memcached为服务器端,我们可以使用如java,PHP,c/c++等程序连接memcached服务器。 memcached的服务器客户端通信并不使用XML等格式,而使用简单的基于文本行的协议。因此,通过telnet也能在memcached上保存数据、取得数据
  • 15. Memcached机制深入了解 ②基于libevent的事件处理libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统: Windows/Linux/BSD/Solaris 等操作系统的的事件处理。 Memcached 使用libevent来进行网络并发连接的处理,能够保持在很大并发情况下,仍旧能够保持快速的响应能力。
  • 16. Memcached机制深入了解 ③内置内存存储方式为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。
  • 17. Memcached机制深入了解 ④基于客户端的分布式memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢?这完全取决于客户端的实现。 如图:
  • 18. Memcached细节讨论 1. 生命周期(是在add 数据的时候指定的) 2. Memcached数据存在什么地方 3. Memcached最佳实践 ① 将从数据库查询的数据放入Memcached (举例说明)
  • 19. Memcached细节讨论 ② 将Session数据放入到Memcached(举例说明) 4.Memcached的数据是无用户状态的.即不会和某个用户绑定 5.Memcached访问安全性(举例) 设置防火墙 iptables -a input -p 协议 -s 可以访问ip -dport 端口 -j ACCEPT 保证memcache扩展开启,memcachd运行 将tomcatmemsession.rar里的context.xml替换 x:\apache-tomcat-6.0.13\conf下同名文件 (主要是context.xml里增加了 lt;/Manager> )
  • 20. Memcached细节讨论 什么样的数据适合放入memcached中? 变化频繁,具有不稳定性的数据,不需要实时入库, (比如用户在线 状态、在线人数..) 门户网站的新闻等,觉得页面静态化仍不能满足要求,可以放入 到memcache中.什么样的数据不适合放入memcached中?小结如何决定是否使用memcached -如果是一个小网站,pv值不大,就不考虑使用memcache了 --变化频繁,查询频繁,但是不一定写入数据库(适合memcached)(用户在线状态.) --变化频繁, 一变化就要入库[比如股票,金融.](不适合memcached) --变化不频繁,查询频繁,不管如不入库,都比较适合memcache。(新浪的新闻频道)
  • 21. Memcached细节讨论 Memcached vs session的比较存放的介质不同 生命周期方式 要解决的问题重点不同相关技术 Redis(Key/value型数据库),将数据保存在内存中,并定时向硬 盘中同步。
  • 22. Memcached细节讨论 Memcached 存对象Memcached相当于一个功能强大的Map,通过Key/Value的形式 来缓存POJO实体,在定义实体的时候,实体及实体的每个成员变量必须是可序列化的,可实现Serializable接口来为实体指定序列化方法