关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » JAVA »使用Memcached改进Java企业级应用性能(1):架构和设置

    使用Memcached改进Java企业级应用性能(1):架构和设置

    2015-06-03 00:00:00 出处:Nix.Huang
    分享

    Memcached由Danga Interactive开发,用来提升LiveJournal.com网站性能。Memcached分布式架构支持众多的社交网络应用,Twitter、Facebook还有Wikipedia。在接下来的两部分教程中,Sunil Patil介绍了Memcached分布式哈希表架构,以及利用它帮助你为数据驱动Java企业应用做数据缓存。

    ITJS的这篇文章介绍了如何利用Memcached提升Java企业应用性能。首先,总览了传统的Java缓存框架,并和Memcached做一个比较。当然,也会在你的本机上安装Memcached,如何通过telnet与Memcached交互工作。接着,创建一个”Hello Memcached”Java客户端程序。你会了解如何利用Memcached减少数据库服务器负载,缓存动态生成的页面标记。最后,考虑对spymemcached客户端做一些高级优化配置。

    Memcached以及Java缓存架构总览

    像Ehcache和OSCache这样的Java缓存框架,本质上是存在于应用代码中的HashMap对象。无论何时添加一个新的对象到缓存中,它都保存在你的应用内存中。保存少量数据时,这个策略是没有问题的,但缓存超过GB的数据就有问题了。Memcached服务器的设计者采用一种分布式架构,这种方式便于扩展,因此,可以利用Memcached做海量数据缓存。

    Memcached架构包含两部分。首先是一个拥有自身进程的Memcached服务器软件。倘若你想扩展你的应用,可以在其它机器上运行Memcached服务器软件。Memcached服务器软件实例相互独立。Memcached系统的第二部分是Memcached客户端,它确切地知道每台服务器的存在。客户端负责获取缓存录入对应的服务器,以及存储或者获得缓存录入——这一过程,稍后我会做详细地讨论。

    如果曾经开发过Java EE 网络应用,你一定用过EHCache或者OSCache之类的Java开源缓存框架。你或许用过DynaCache或者JBoss Cache这样的商业缓存框架作为应用服务器的一部分。在我们亲手实践本教程之前,明白Memcached与那些传统Java缓存框架的不同之处是很重要的。

    使用传统的Java缓存

    无论选择开源或者是商业方案,使用传统Java缓存架构是很容易。使用类似EHCache或者OSCache这种开源的框架,你需要下载二进制文件,添加必须的JAR文件到你的应用classpath下。同样,你需要创建配置文件,配置缓存、交换分区的大小。由于缓存框架需要与软件绑定,而缓存框架通常会与应用服务器绑定,所以无需下载任何额外的JAR文件。

    使用Memcached改进Java企业级应用性能(1):架构和设置

    图1 传统的Java缓存架构

    在为你的应用程序添加缓存框架之后,通过创建CacheManager对象获取和设置其中的缓存条目(entry)。这样,你的应用和缓存框架创建的CacheManager会在相同的JVM上运行。每次增加缓存条目,此对象会添加到由缓存框架维护某类哈希表中。

    一旦你的应用服务器软件运行在多个节点上,你可能需要支持分布式缓存。在分布式缓存系统中,一旦在AppServer1中添加了某个对象,在AppServer2和AppServer3上此对象也变为可用。传统的Java缓存使用复制(replication)实现分布式缓存,这意味着当你为AppServer1添加一个缓存条目,该条目会自动复制到系统的其它应用服务器上。最终,条目会在所有的站点中可用。

    使用Memcached

    要使用Memcached进行缓存,必须下载并在你的平台上安装Memcached服务器软件。一旦Memcached服务器安装成功,它会通过TCP或者UDP端口监听缓存调用。

    使用Memcached改进Java企业级应用性能(1):架构和设置

    图2 Memcached架构

    接着,下载一个JavaMemcached客户端,把客户端JAR文件添加到你的应用中。然后创建一个Memcached客户端对象,就可以调用它的方法获取和设置缓存条目。一旦添加某个对象到缓存中,Memcached客户端会获取该对象、对其序列化并发送字节数组到Memcached服务端保存。这时,缓存对象可能被应用运行的JVM作为垃圾回收。

    当你需要缓存对象时,可以调用Memcached客户端的 get() 方法。客户端会得到这个get请求、序列化并将get请求传给Memcached服务器。Memcached服务器通过该请求从缓存中查找这个对象。如果存有此对象,服务器会把这个字节数组返回给客户端。客户端收到字节数组,反序列化并创建对象返回给你的应用。

    即使你的应用跑在不止一个应用服务器上,所有的应用都能指向相同的Memcached服务器,通过它获取并设置缓存条目。倘若你拥有不止一台Memcached服务器,服务器互相之间不会知道。因此,你需要配置Memcached客户端,这样它就能知道所有Memcached服务器。比如,应用在AppServer1创建一个Java对象,接着调用Memcached的 set() 方法,Memcached客户端就找到某个Memcached服务器来存放条目。接着它只和此台Memcached服务器通信。同样,一旦存在于AppServer2或者Appserver3的代码尝试去获取某个录入时,Memcached客户端首先会找出哪个服务器存储了此条目,接着只与此服务器通信。

    Memcached客户端逻辑

    在缺省状态下,Memcached客户端使用非常简单的逻辑选择服务器进行get或set操作。一旦调用get()或者set(),客户端就会得到缓存键(key)调用hashcode()方法得到整数值,比如11。接着用这个数除以Memcached服务器可用数量(比如2),本例中得到的余数为1。缓存条目就会指向Memcached服务器1。这个简单的算可以确保应用服务器所在的Memcached客户端为给定的缓存键选择相同的服务器。

    Memcached安装

    Memcached可以运行在Unix、Linux、windows以及MacOSX上。你可以下载Memcached源码编译,或者直接下载编译好的二进制文件安装Memcached。这里我会展示为特定平台下载二进制文件的安装过程。如果你更倾向于编译,请参见这里。

    接下来的安装指令针对Windows XP 32位机器,若平台是linux等其它平台,查看这里。注意ITJS的这篇文章案例代码是在Windows XP 32位机器上开发的,不过是可以在其它平台上运行。

    Jellycan code是一个Memcached修订版本,更易用更有效,我们先从下载win32二进制压缩文件开始。 解压Memcached-<versionnumber>-win32-bin.zip,注意里面包含memcached.exe,执行此文件完成服务器搭建。 使用 memcached.exe -d install 注册memcached.exe作为系统服务,你可以在服务控制台开启或者停止Memcached服务器。

    当你在缺省状态下执行memcached.exe,Memcached服务器默认占用64兆内存,监听11211端口。在某些情形下,或许你想做一些更加细粒度的控制。比如,端口11211被本机其他进程占用,你希望Memcached可以监听端口12000;或者你想在质量保证或者生产环境中搭建Memcached服务器,需要的默认内存不止64兆。你可以通过命令行参数定制服务器行为。运行memcache.exe -help命令会获取所有的命令行选项,如下图3所示。

    使用Memcached改进Java企业级应用性能(1):架构和设置

    图3 Memcached服务器命令行选项

    通过Telnet与Memcached交互

    一旦Memcached服务器开始监听你指定的端口,Memcached客户端就可以通过TCP或者UDP端口与之连接,发送命令或者接受响应,最后关闭连接。

    连接Memcached服务器方式有多种,我会在本教程的第二部分采用Java客户端连接,你将能够利用简单的API从缓存中存储或者获取对象。或者你可以采用Telnet客户端直接与服务器连接。懂得利用Telnet客户端与Memcached服务器交互对调试Java客户端很重要,因此我们就从这里开始。

    Telnet命令

    首先你需要用Telnet客户端连接Memcached服务器。在WindowsXP平台上,如果Memcached服务器也运行在这台机器上并缺省监听端口11211,只要执行telnet localhost 11211。接下来的命令对Telnet管理Memcached很重要:

    set添加一个新的项目到缓存中,使用格式是 Set <keyName> <flags> <expiryTime> <bytes>,你可以将敲入的值存入下一行。倘若不想缓存录入过期,可以输入0。 get返回缓存键的值,调用get <keyName>获得keyName的值。 add添加一个新的键,前提是此键之前并不存在,比如add <keyName> <flags> <expiryTime> <bytes>。 replace会替代某个键的值,前提是此键已存在,比如replace <keyName> <flags> <expiryTime> <bytes>。 delete删除某个键的缓存录入,调用delete <keyName>删除keyName的值。

    图4的截图展示了通过Telnet与Memcached服务器交互案例。正如你所看到的,Memcached服务器会对每个命令做出回应,比如STORED、NOT_STORED等。

    使用Memcached改进Java企业级应用性能(1):架构和设置

    图4 Telnet客户端与Memcached服务器交互案例

    第一部分结语

    到此,我们简要地讨论了Memcached分布式框架和众多传统Java缓存系统。在你的开发环境中安装了Memcached,通过Telnet连接Memcached。教程的下一篇中,我们将调用Java客户端sypmemcached命令,为一个Java示例应用建立分布式缓存方案。在此过程中,你会了解更多关于Memcached的信息,以及如何提升你的JavaEE应用性能。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    商业智能成CIO优先关注点 技术落地方显成效(1)

    用linux安装MySQL时产生问题破解

    JAVA中关于Map的九大问题

    windows 7旗舰版无法使用远程登录如何开启telnet服务

    Android View 事件分发机制详解

    MySQL用户变量的用法

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。