`

Memcached之java客户端开发

阅读更多

       前言:之前项目中,有需求在不同语言开发的服务器之间做数据共享,从而引入了Memcached技术,在实际使用中,Memcached除了作为数据共享的用途外,还用作数据库前段存储。但是,查阅相关资料发现,用java操作Memcached服务器的资料并不是太多,偶尔查到的资料也不能运行,踩了很多坑,因此总结项目中的使用经验,输出基本demo。

       本篇文章重点关注以下问题:

  • Memcached简介,及对安装的简要说明;
  • Memcached几种客户端介绍;
  • Memcached的Demo输出;

1. Memcached简介,及对安装的简要说明;

1.1 Memcached简介

         Memcached是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序。它是一个基于内存的“键值对”存储,用于存储数据库调用、API调用或页面引用结果的直接数据,如字符串、对象等。

         首先来看一个Memcached的基本使用场景:

       许多Web应用都将数据保存到RDBMS(关系型数据库管理系统)中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。这时就该Memcached大显身手了。Memcached是高性能的分布式内存缓存服务器。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。

       总结Memcached的使用特点:

  1.  简单key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成。
  2. 功能的实现一半依赖于客户端,一半基于服务器端:客户负责发送存储项至服务器端、从服务端获取数据以及无法连接至服务器时采用相应的动作;服务端负责接收、存储数据,并负责数据项的超时过期。
  3. 各服务器间彼此无视,不在服务器间进行数据同步。所有分布式功能由客户端实现。
  4. O(1)的执行效率。
  5. 清理超期数据,默认情况下,Memcached是一个LRU缓存,同时,它按事先预订的时长清理超期数据。但事实上,Memcached不会删除任何已缓存数据,只是在其过期之后不再为客户所见;而且,Memcached也不会真正按期限清理缓存,而仅是当get命令到达时检查其时长。

1.2 Memcached安装过程

       Linux系统的安装过程自定百度吧,我这仅介绍下Windows系统下搭建测试环境的过程:
步骤一:下载安装包(memcached-win64-1.4.4-14),附件中也可下载。
步骤二:加压后,将文件夹拷贝到某个目录下(不要出现中文)。如D:\Program Files\memcached-win64-1.4.4-14;
步骤三:打开cmd,进入memcached解压后存放的目录,运行命令memcached.exe -d install
步骤四:检查是否安装成功,进入memcached解压后存放的目录,运行命令:memcached -h,如果安装成功,会出现下图:

 步骤五:启动Memcached:memcached.exe -d start,查看是否启动:

 

2. Memcached几种客户端介绍

  1. memcached client for java:官方提供的基于传统阻塞io由Greg Whalin维护的客户端;
  2. spymemcached:基于java nio的Spymemcached;
  3. xmemcached:国人开发的,貌似各方面性能指标都很优秀;

       由于memcached client for java发布了新版本,性能上有所提高,并且运行稳定,所以建议使用memcached client for java。  

       XMemcached目前也使用得比较广泛,而且有较详细的中文API文档,具有如下特点:高性 能、支持完整的协议、支持客户端分布、允许设置节点权重、动态增删节点、支持JMX、与Spring框架和Hibernate-memcached的集 成、客户端连接池、可扩展性好等。

3. Demo输出 

3.1 memcached client for java

       https://cloud.github.com/downloads/gwhalin/Memcached-Java-Client/java_memcached-release_2.6.6.zip下载解压后,将里面所有的jar包添加到项目的构建路径里。

先上封装的工具类:

package com.wj.MemCachedClient;

import java.util.Date;

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;

public class MemcachedHelper {
    // 构建缓存客户端
    private static MemCachedClient cachedClient = new MemCachedClient();
    // 单例模式实现客户端管理类
    private static MemcachedHelper INSTANCE = new MemcachedHelper();
    
    private MemcachedHelper() {}
    
    /**
     * 获取缓存管理器唯一实例
     * @param servers   设置缓存服务器列表,当使用分布式缓存的时,可以指定多个缓存服务器。(这里应该设置为多个不同的服务器)
     * @return
     */
    public static MemcachedHelper getInstance(String[] servers) {
        // 初始化SockIOPool,管理memcached的连接池
        SockIOPool pool = SockIOPool.getInstance();

        pool.setServers(servers);
        pool.setFailover(true);
        pool.setInitConn(10); // 设置初始连接
        pool.setMinConn(5);// 设置最小连接
        pool.setMaxConn(250); // 设置最大连接
        pool.setMaxIdle(1000 * 60 * 60 * 3); // 设置每个连接最大空闲时间3个小时
        pool.setMaintSleep(30);
        pool.setNagle(false);
        pool.setSocketTO(3000);
        pool.setAliveCheck(true);
        pool.initialize();
        return INSTANCE;
    }

    public void add(String key, Object value) {
        cachedClient.set(key, value);
    }

    public void add(String key, Object value, int milliseconds) {
        cachedClient.set(key, value, milliseconds);
    }

    public void remove(String key) {
        cachedClient.delete(key);
    }

    @SuppressWarnings("deprecation")
    public void remove(String key, int milliseconds) {
        cachedClient.delete(key, milliseconds, new Date());
    }

    public void update(String key, Object value, int milliseconds) {
        cachedClient.replace(key, value, milliseconds);
    }

    public void update(String key, Object value) {
        cachedClient.replace(key, value);
    }

    public Object get(String key) {
        return cachedClient.get(key);
    }

    public static void main(String[] args) {
        //将对象加入到memcached缓存
        cachedClient.add("keke", "This is a test String");
        //从memcached缓存中按key值取对象
        String result  = (String) cachedClient.get("keke");
        
        System.out.println(result);
    }
}

 调用demo:

package com.wj.MemCachedClient;

public class Main {

    public static void main(String[] args) {
        String[] servers = { "127.0.0.1:11211"};
        MemcachedHelper memcachedHelper = MemcachedHelper.getInstance(servers);
        
        memcachedHelper.add("key", "value");
        String result = (String) memcachedHelper.get("key");
        
        System.out.println(result);
    }
}

 3.2 spymemcached

        官方下载网址:http://code.google.com/p/spymemcached/。不过这个地址一般打不开,原因你懂得,附件中给jar包。
直接上封装的工具类:
package com.wj.spymemcached;

import java.io.IOException;
import java.net.InetSocketAddress;

import net.spy.memcached.MemcachedClient;

public class MemcachedHelper {
    // 缓存客户端
    private static MemcachedClient memcacheCient;
    // Manager管理对象,单例模式
    private static MemcachedHelper INSTANCE = new MemcachedHelper();
    
    private MemcachedHelper() {}
    
    public static MemcachedHelper getInstance(InetSocketAddress... addresses) {
        try {
            memcacheCient = new MemcachedClient(new InetSocketAddress(
                    "127.0.0.1", 11211));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return INSTANCE;
    }
    
    public void add(String key, Object value, int milliseconds) {
        memcacheCient.add(key, milliseconds, value);
    }

    public void add(String key, Object value) {
        memcacheCient.add(key, 3600, value);
    }

    public void remove(String key, int milliseconds) {
        memcacheCient.delete(key);
    }

    public void remove(String key) {
        memcacheCient.delete(key);
    }

    public void update(String key, Object value, int milliseconds) {
        memcacheCient.replace(key, milliseconds, value);
    }

    public void update(String key, Object value) {
        memcacheCient.replace(key, 3600, value);
    }

    public Object get(String key) {
        return memcacheCient.get(key);
    }
}
    
 下面是调用demo:
package com.wj.spymemcached;

import java.net.InetSocketAddress;

public class Main {

    public static void main(String[] args) {
        InetSocketAddress address = new InetSocketAddress("127.0.0.1", 11211);
        MemcachedHelper memcachedHelper = MemcachedHelper.getInstance(address);
        
        memcachedHelper.add("key1", "value1");
        String result = (String) memcachedHelper.get("key1");
        
        System.out.println(result);
    }
}

 3.3 xmemcached

         Xmemcached的官方网址是:http://code.google.com/p/xmemcached/

         尚未研究过,有待后续添加...

 

代码地址:http://pan.baidu.com/s/1pLDLip9, ,密码:8dj6

 

 

有用的学习网址:http://www.runoob.com/memcached/memcached-tutorial.html

  • 大小: 29.1 KB
  • 大小: 31.2 KB
  • 大小: 14.5 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    MemCached开发java客户端的使用

    这是MemCached的java客户端连接使用的例子,里面包含了MemCached的增删改查操作,对字符串 list set map 对象的操作等。看就会就入门了,

    memcached java客户端驱动包

    **Memcached Java客户端驱动包详解** Memcached是一种高性能的分布式内存对象缓存系统,用于减少数据库负载,提高网站性能。Java连接Memcached的驱动包使得Java开发者能够方便地与Memcached进行交互,实现数据的...

    Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(1)-介绍及使用

    gwhalin的Memcached Java客户端是一个轻量级、高性能的库,使得Java开发者可以轻松地与Memcached服务器进行交互。 ### 一、Memcached简介 Memcached是Danga Interactive公司开发的一个开源项目,主要用于存储和检索...

    memcached for java client 例子

    2. **Java客户端库**:为了在Java应用中使用memcached,我们需要一个客户端库,如spymemcached、xmemcached或者memcached-java-client等。这些库提供了与memcached服务器通信的接口和方法。 3. **安装与配置**:在...

    memcached客户端(三种客户端)

    在Java开发中,有三种主流的Memcached客户端库供开发者选择:官方的基于传统阻塞IO的客户端、Dustin Sallings实现的基于Java NIO的Spymemcached以及XMemcached。 1. **官方客户端** 官方提供的客户端是由Greg ...

    Memcached java的使用实例

    在Java开发中,我们经常会利用Memcached来存储和检索数据,以此提升应用程序的性能。本文将深入讲解如何在Java环境下集成和使用Memcached。 首先,我们需要在Java项目中引入Memcached的客户端库。常见的Java ...

    java_memcached-release_2.6.3.rar 客户端所有包

    这个`java_memcached-release_2.6.3.rar`压缩包包含了用于Java客户端开发所需的全部依赖库,使得开发者能够轻松地在Java应用中集成Memcached功能。 1. **Memcached**:Memcached是一个高性能、分布式的内存对象缓存...

    memCached win64服务端和Java客户端

    2. **连接与操作**:Java客户端库提供了API来连接memcached服务器,执行基本的缓存操作,如设置、获取、删除键值对。这些操作通常是异步的,以保证高并发下的性能。 3. **API接口**:常见的Java客户端库如...

    Memcached-Java-Client-release_2.6.1.zip

    2. **Memcached Java客户端库** - Memcached-Java-Client是Java开发者与Memcached进行交互的主要工具,它提供了简单易用的API接口,允许开发者方便地在Java应用中存取缓存数据。 - 版本2.6.1是该客户端的一个稳定...

    memcached 完整的项目,服务端(win) 客户端 包括jar包

    这个项目包含了 Memcached 的服务端(适用于 Windows)以及 Java 客户端,是开发基于 Java 的分布式应用的重要工具。 ### 一、Memcached 服务端 (Win) Memcached 服务端为 Windows 平台提供了轻量级的内存缓存解决...

    java_memcached-release_2.5.1.jar Memcache java jar 包

    Java Memcached是一个流行的Java客户端库,用于与Memcached缓存系统进行交互。Memcached是一种分布式内存对象缓存系统,常用于减轻数据库负载,提高Web应用的性能。在本例中,我们关注的是`java_memcached-release_...

    memCache源码java客户端

    **memCache源码分析——Java客户端** memCache是一款高性能、分布式的内存对象缓存系统,常用于减轻数据库的负载,提升应用性能。它的主要特点是基于内存存储,操作速度快,无持久化机制,适用于缓存非关键数据。在...

    memcached 的简单java实例

    Java开发人员可以通过多种库来与Memcached进行交互,例如Spymemcached、Xmemcached和Memcached Java Client等。这些库提供了方便的API,使Java开发者能够轻松地将Memcached集成到他们的应用程序中。 **Spymemcached...

    R-Memcached:memcached 的 Java 客户端的中间件

    `R-Memcached`作为其Java客户端,旨在简化开发过程,提升应用程序的响应速度。 ### 一、 Memcached简介 Memcached是一种高性能的分布式内存对象缓存系统,用于临时存储(缓存)中间结果或常用数据,以减少对数据库...

    memcached客户端工具

    TreeNMS是一款redis,Memcache可视化客户端工具,采用JAVA开发,实现基于WEB方式对Redis, Memcached数据库进行管理、维护。 功能包括:NoSQL数据库的展示,库表的展示,key,value的展示,新增,修改,删除等数据的...

    memcached-java_2.8,客户端,源代码,chm_api

    Java是广泛使用的编程语言,而`memcached-java_2.8`是一个Java客户端库,它允许Java开发者方便地与Memcached服务器进行交互。 这个压缩包文件包含了`memcached-java`客户端的源代码和CHM格式的API文档,版本为2.8。...

    java中连接memcached服务器

    首先,要连接到Memcached服务器,你需要一个Java客户端库。常见的有spymemcached和XMemcached。这里我们以spymemcached为例,因为它是社区中广泛使用的客户端之一。要添加spymemcached库,可以在Maven项目的pom.xml...

    memcached java client

    在Java开发中,有多个客户端库可供选择来与Memcached进行交互。本篇文章将详细介绍两个常用的Java Memcached客户端:xmemcached和memcache-client-forjava。 **1. xmemcached** xmemcached是由Ketoo开发的一个高...

    memcached-1.2.1-win32.zip 和 java_memcached-release_1.6.zip

    这表明我们正在处理的是与Memcached相关的开发资源,一个是Windows上的Memcached服务器版本1.2.1,另一个是Java客户端库的release 1.6。 描述中提到,这些资源适用于基于Java的Memcached数据缓存的开发。这暗示我们...

Global site tag (gtag.js) - Google Analytics