`
ljh2008
  • 浏览: 45969 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

Memcached在项目中的应用

阅读更多

Memcached是一个开源的快速分布式缓存框架,它和ehcached等缓存框架相比,具有下面的一些优势:
1、    跨jvm的缓存架。我们知道,在一个jvm进程中,一般情况下的有效内存利用最多为2G,如果你再把数据缓存在项目的jvm进程中,势必造成内存空间的紧 缺,严重的时候会出现堆栈溢出面导致项目终止运行。
2、    集群环境下的缓存框架。Memcached启动后,有自己的独立IP地址及端口号(默认是11211,当然你可以更改),因此,在集群环境下或不同的几个 项目间,都可以访问缓存服务器中的数据,非常的方便。
下面我们一起来看一看笔者在最近的一个项目中,是如何使用memached的。
一、安装memcached缓存服务器
如果你用的是windows服务器系统,请到http://jehiah.cz/projects/memcached-win32/下载,点其中的 exe可执行文件,Memcached就完成了启动,非常的简单。
如果你使用的是linux server,你需要如下的操作(以ubuntu为例):
$ sudo apt-get install memcached(安装)
$ memcached -d -m 50 -p 11211 -u root(启动)
上面命令行参数说明:-m 指定使用多少兆的缓存空间;-p 指定要监听的端口; -u 指定以哪个用户来运行,默认情况下,会在本机的11211端口监听操作连接,你可以通过netstat –ant查看memcached是否已经正常运行。
你也可以通过修改/etc/default/memcached配置文件,将ENABLE_MEMCACHED=yes,让系统启动时,自动运行 memcached,省去了每次都要手式启动的繁琐步骤。
二、下载memcached的java访问客户端。下载地址:http://github.com/gwhalin/Memcached-Java- Client/downloads,将压缩包中的java_memcached-release_2.5.1.jar放到你的工程目录中。
如果你是用的PHP,Ruby等,也可在网上找到相应的访问Memcached模块及示例代码。
三、在java程序中的访问。
首先要强调一下,放入memcached中缓存的对象,必须以键值对(key/value)的方式放入,取的时候根据key来取,但memcached有 几个自己的特殊要求:key必须为String,即字符串类型;而要缓存的对象必须要实现Serializable序列化接口。
在英语复读网(www.fudu365.com)的播放器中,当用户将鼠标停留到某个单词上时,系统要弹出该单词的解释及音标,由于项目组在开发时并没有 找到一套合适的词库,我们的解决思路是:当有用户查询时,服务器向第三方翻译网站提交单词,再从返回的结果中解析出单词解释及发音。此查询过程相当费时, 且在网络状态不好时表现不佳,但在当时这也许是最好的解决办法了。
Word对象是我们封装的单词音标及解释对象,该对象实现Serializable接口。当用户查询某个单词时,我们先会在Memcached缓存中查 找,如果没有找到,则向数据库查询,如果数据库中也没有找到,再向第三方翻译网站提交,得到结果后返回给用户后,同时要把该单词存入数据库,同时放入 Memcached缓存,下次有用户查询同样的单词时,效率将会得到非常大的提升。系统得到一个单词翻译的代码如下:
public Word getWordTranslate(String aWord) {
        // 先从缓存中取
        Word word = getWordFromCache(aWord);
        if (word != null) {
            return word;
        }
       
        //从数据库中取
        word = wordDao.getWord(aWord);
        if (word != null) {
            //放入缓存
            MemcachedAdapter.add(aWord, word);;
            return word;
        }
       
        //从网上查词
        word = translateWordFromWebSite(aWord);
       
        if (! "e".equals(tv.getWords())) {
            //存入数据库
            saveWord(word);
            //放入缓存
            MemcachedAdapter.add(aWord, word);
        }
       
        return word;
    }

Memcached操作代码如下,其中的一些连接参数,你可以根据你的情况进行修改。
public class MemcachedAdapter {
   
protected static MemCachedClient mcc = new MemCachedClient();
   
    static {
        SockIOPool pool = SockIOPool.getInstance();
        pool.setServers(new String[]{"127.0.0.1:11211"});
       
        Integer[] weights = { 3 };
        pool.setWeights( weights );
        pool.setInitConn( 5 );
        pool.setMinConn( 5 );
        pool.setMaxConn( 250 );
        pool.setMaxIdle( 1000 * 60 * 60 * 6 );
       
        pool.setMaintSleep( 30 );
       
        pool.setNagle( false );
        pool.setSocketTO( 3000 );
        pool.setSocketConnectTO( 0 );
       
        pool.initialize();
    }
   
    public static Object get(String key) {
        return mcc.get(key);
    }
   
    public static boolean set(String key, Object o) {
        return mcc.set(key, o);
    }
   
    public static boolean add(String key, Object o) {
        return mcc.add(key, o);
    }
   
    public static boolean replace(String key, Object o) {
        return mcc.replace(key, o);
    }
   
    public static boolean delete(String key) {
        return mcc.delete(key);
    }
   
}

voa英语复读网 上线前,我们对单词翻译部分进行了压力测试,在很多用第一次查询某个单词的时候,速度很慢,但系统运行一段时候后,由于常用单词都在Memcached中 进行了缓存,速度上就基本就存在问题了。
最后还有一个问题要考虑,就是在操作系统重新启动后,Memcached中缓存的数据将不再存在,为了效率考虑,你可以在应用服务器启动时,将所有的单词 对象全部读出,再添加到Memcahced中。
项目上线后性能表现还是非常不错的,你可通过www.fudu365.com查看到最终效果。

1
0
分享到:
评论

相关推荐

    memcached在JAVA项目中的应用.docx

    memcached在JAVA项目中的应用

    Memcached_程序与php中应用

    里面memcached的程序,应用于php的memcached-client.php,memcached类, 还有一个关于memcached使用的示例文档url

    Memcached网站应用实战

    Memcached网站应用实战....................

    memcached1

    Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。Memcached由Danga Interactive开发,用于提升LiveJournal.com访问速度的。LJ每秒动态页面访问量几千次,用户700万...

    完整的.net Memcache实例项目

    另外,memcached通常部署在业务逻辑层(前台应用)和存储层(主指数据库)之间,作为数据库和前台应用的数据缓冲,因此可以快速的响应前端的请求,减少对数据库的访问。 官方网站:http://www.danga.com/memcached/

    LinQ to Memcached with SQL Server Change Tracking

    1.Memcached 安装、部署、Demo程序 2.LinQ to Memcached 3.性能测试、通信数据结构设计 ...6.项目应用(IM基础数据缓存,例:Category、Brand、Manufacturer等) 7.了解Memcached实现机制,数据模型并做培训

    spring+struts+mybatis+security+memcached+GBAC权限架构开源项目

    spring+struts+mybatis+security+memcached+GBAC权限架构开源项目, 懂的自己下载看,不懂的就去问懂的,还有就是有的人说上一个版本的代码有点乱,我只能说你站在你的角度看,我站在我的角度写,说明我们有代沟,大概如此...

    20120102 net下memcached 分布式缓存系统应用

    20120102 net下memcached 分布式缓存系统应用 本人收藏了3年的资源 现放出 都是总结了很多系统 软件项目实施过程中的经验的 慢慢积累的

    dot net memcached 分布式缓存应用类库

    dot net memcached 分布式缓存应用类库 本人收藏了3年的资源 现放出 都是总结了很多系统 软件项目实施过程中的经验的 慢慢积累的

    Spring_Memcached:使用与Spring集成的Memcached

    用Spring进行Memcached 在这个项目中,您将发现spring REST应用程序中memcached的基本用法。如何使用?添加依赖//对于Gradle项目,添加以下依赖项。 compile( " net.spy:spymemcached:2.12.3 " )设置Memcached 在您...

    Memcached的安装(包括所需文件和例子)

    1安装Memcached所需的文件;...3.运用Memcached的例子(需先按步骤把环境搭了,例子是vs2010环境下的,各位自行研究其方法);4.简单介绍Memcached的ppt。(其中例子和ppt是我们项目组内部培训用的,写的比较简单)

    Java的开源高性能memcached客户端XMemcached.zip

    高性能,稳定可靠,已经在众多公司的众多项目里得到应用。 功能完备:客户端分布式、权重、最新最完整的协议支持。 可扩展,易于集成 可动态增删memached节点 客户端操作统计 NIO...

    capistrano-memcached:Capistrano 任务用于自动和合理的内存缓存配置

    这个插件的目标: Rails 应用程序的自动内存缓存配置不需要手动 ssh到服务器规格: 在服务器上生成配置文件(默认在 /etc/memcached.conf 中) 在 shared/config 中生成 memcached.yml 配置文件,以便 RoR 应用程序...

    tomcat之间session共享之memcached方式.zip

    对于部署多个tomcat分流的情况,seesion的处理就很重要。该方式已在项目中实际应用,大家可以大胆下载

    role_memcached

    role_memcached }变数此角色的主要变量及其使用方法如下: 项目细节格式需要分配memcached_version ” 细绳不例子memcached_version: ""资源执照 ,附加条款:不允许基于此存储库在任何Cloud平台的Marketplace中发布...

    redis入门到精通、集群与应用

    redis是一个key-value存储...与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

    IOIF面向项目的开源开发框架

    该框架在实现的过程中提出一个新的概念IOP“面向项目的开发”。在这个思想的指导下,结合当前流行的框架与技术,开发实现了一个面向项目的集成框架,命名为IOIF。IOIF避免了对某个项目的依赖,使之成为一个主流B/S与...

    sa-s3-memcached

    ElastiCache Memcached 包装器 (memcached) 该项目通过 lib/memcached.js 包装器在 AWS 中实现了 Memcached 节点的自动发现。 当有新节点通过控制台添加到 ElastiCache 时,它​​会自动检测并将它们添加到连接列表...

    JAVA上百实例源码以及开源项目源代码

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    大型网站架构与自动化运维

    本书针对具备Linux 基础的人群,主要介绍了缓存代理、高性能内存对象援存Memcached 、分布式文件服务、大型网站架构、自动化运维的相关知识与应用,以企业级 的实战项目案例,使读者能够掌握应用运维的工作内容。...

Global site tag (gtag.js) - Google Analytics