`

Java memcache提升数据读写能力

阅读更多
1、下载安装
  1. 从http://jehiah.cz/projects/memcached-win32/ 上下载memcache的windows稳定版,解压放某个盘下面,比如在F:\memcached
   2. 在终端(也即cmd命令界面)下输入 'F:\memcached\memcached.exe -d install' 安装
   3. 再输入: 'F:\memcached\memcached.exe -d start' 启动
   4.开发jar包下载:
   memcached client for java:https://github.com/gwhalin/Memcached-Java-Client/downloads  
   spymemcached:http://code.google.com/p/spymemcached/
   xmemcached:http://code.google.com/p/xmemcached/    --- 注意: 以后memcached将作为windows的一个服务每次开机时自动启动。默认端口:11211。
2、Memcahe的三种API
(1)、memcached client for java,memcache 最早推出的Java客户端API,并且不断更新,性能上得到提升并且稳定。
(2)、spymemcached
   A simple,asynchronous,single-thread memcached client written in java.支持异步单线程的memcached客户端。
       使用到JDK1.5听过的nio和concurrent,存取速度高于前者,但是稳定性不好,测试中常报TimeOut异常。
(3)、xmemcached
   xmemcached同样是基于java nio的客户端,java nio 相对于传统io来说有效率高(特别是在处理并发方面)和资源耗费相对较少的优点。
       传统io需要建立多个连接组成连接池,而nio只需要一个连接即可(nio也可以池化),减少了线程的创建和切换的开销,这一点在高并发操
       作下尤为明显。因此,xmemcached和spymemcached在性能方面都非常优秀,在某些方面(存储的数据量比较小的情况下),xmemcached要
       优于spymemcached。
3、程序参考示例--见java测试文件
package com.boonya.mecache;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
public class TestMemCached {
   
    /**
     * @param args
     */
    public static void main(String[] args) {
       
        /**
         * 初始化SockIoPool,管理MemCached线程池
         */
        String servers[]={"192.168.20.37:11211"};
        SockIOPool pool=SockIOPool.getInstance();
        pool.setServers(servers);
        pool.setFailover(true);
        pool.setInitConn(10);
        pool.setMinConn(5);
        pool.setMaxConn(300);
        pool.setMaintSleep(30);
        pool.setNagle(false);
        pool.setSocketTO(3000);
        pool.setAliveCheck(true);
        pool.initialize();
       
        /**
         * 创建MemCachedClient实例
         */
        MemCachedClient memcacheClient=new MemCachedClient();
       
        for (int i = 0; i < 100; i++) {
            boolean success=memcacheClient.set("key"+i,"a_memcached");//将对象加入到MemCache缓存
            /**
             * 读取MemCache缓存
             */
            String result=(String) memcacheClient.get("key"+i);
            System.out.println(String.format("set{%d}:%s",i,success));
            System.out.println(String.format("get{%d}:%s",i,result));
        }
       
    }

}
package com.boonya.mecache;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import net.spy.memcached.MemcachedClient;
public class TestSpyMemCached {
   
    public static void main(String[] args) throws InterruptedException, ExecutionException {
       
        /**
         * 建立MemCached的示例
         */
        try {
            MemcachedClient memcacheClient=new MemcachedClient(
                    new InetSocketAddress("192.168.20.37", 11211));
           
            Future<Boolean> fbl=null;
            /*将key,过期时间,对应的值设入到MemCache*/
            fbl=memcacheClient.set("user:data:key", 1000, "me");
            if(fbl.get().booleanValue()==true){
                memcacheClient.shutdown();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
       
        /**
         * 获取MemCached的示例
         */
        try {
            MemcachedClient memcacheClient=new MemcachedClient(
                    new InetSocketAddress("192.168.20.37", 11211));
           
            Object obj=memcacheClient.get("user:data:key");
            System.out.println(obj);
            memcacheClient.shutdown();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

package com.boonya.mecache;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
import net.rubyeye.xmemcached.MemcachedClient;
import net.rubyeye.xmemcached.MemcachedClientBuilder;
import net.rubyeye.xmemcached.XMemcachedClientBuilder;
import net.rubyeye.xmemcached.exception.MemcachedException;
import net.rubyeye.xmemcached.utils.AddrUtil;
public class TestXMemCached {
   
    public static void main(String[] args)  {
        MemcachedClientBuilder builder=new XMemcachedClientBuilder(
                AddrUtil.getAddresses("192.168.20.37:11211"));
        try {
            MemcachedClient memCacheClient=builder.build();
            try {
                memCacheClient.set("key", 0, "data");
               
                String value=memCacheClient.get("key");
                System.out.println("key:"+value);
               
                memCacheClient.delete("key");
                value=memCacheClient.get("key");
                System.out.println("key:"+value);
               
                memCacheClient.shutdown();
            } catch (TimeoutException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (MemcachedException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

4、使用建议
  (1)、 memcached client for java不断更新,性能上得到提升,并且稳定。
  (2)、  xmemcached使用广泛,其有如下特点:高性能、支持完整的协议、支持客户端分布、允许设置节点权重、动态增删节点、支持JMX、Spring框架和
  Hibernate-memcached的集成、客户端连接池、可扩展性好等。
分享到:
评论

相关推荐

    Java开发中的Memcache原理及实现

    - 数据操作:通过客户端库提供的API,如get、set、delete等,Java应用可以方便地对Memcached进行数据读写。 - 键值策略:在Java应用中,开发者需要合理设计键值策略,确保数据的唯一性和高效查询。 3. 使用示例:...

    memcache学习文档 for java demo

    Memcache 学习文档 for Java Demo Memcache 是一套分布式的高速缓存系统,由 LiveJournal 的 Brad Fitzpatrick 开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站...

    java版memcache缓存管理与开发

    ### Java版Memcache缓存管理与开发 #### Memcache简介及其在高流量网站中的作用 在高流量网站中,为了缓解数据库的压力并提高网站响应速度,通常会采用Memcache作为缓存解决方案。Memcache是一种高性能、分布式...

    Java开发中的Memcache原理及实现(带书签)

    Memcache使用哈希表(HashTable)来存储数据,数据通过键值对的形式存储在内存中,因此其读写速度快。它的设计目的是为了加速动态网页应用,减轻数据库的负担。它能够处理任意多的连接,使用非阻塞的网络IO,使得...

    Java开发中的Memcache原理及实现以及Redis的入门

    4. **主从复制与集群**: Redis支持主从复制,可以实现数据备份和读写分离。Redis Cluster是其官方提供的分布式解决方案,能自动将数据分散在多个节点上,实现水平扩展。 5. **高级功能**: Redis还提供了发布/订阅、...

    【汇总】Memcache

    2. **内存管理**:Memcache将所有数据存储在内存中,不涉及磁盘操作,因此读写速度极快。内存空间有限,当内存满时,会根据LRU(Least Recently Used)策略自动淘汰最近最少使用的数据。 3. **分布式架构**:多个...

    MemCache对象缓存应用

    **标题:“MemCache对象缓存应用”** **一、MemCache简介** MemCache是一种高性能、分布式内存对象缓存系统,广泛应用于Web应用中,...通过深入学习,开发者可以更有效地利用MemCache提升服务的响应速度和整体性能。

    Memcache 全面剖析,Memcache 教程

    1. **内存存储**:Memcache 将数据存储在服务器的内存中,由于内存的读写速度远高于硬盘,因此可以显著提升数据访问效率。 2. **键值对存储**:Memcache 使用键值对(Key-Value)的方式存储数据,键是唯一的标识符,...

    tomcat整合nginx负载均衡+memcache共享session全部程序包

    在构建高性能、高可用性的...总之,这个“tomcat7+nginx+memcached”程序包提供了一种高效、可靠的Web应用架构,通过Nginx实现负载均衡,借助Memcache实现跨服务器的Session共享,极大地提升了系统的可用性和扩展性。

    Memcache各种下载

    Memcache的使用通常与PHP、Python、Java、Ruby等编程语言相结合,提供一个跨语言的内存数据存储解决方案。 "Memcache各种版本下载.txt"这个文件名可能包含了一个文本文件,该文件汇总了不同版本的Memcache下载链接...

    缓存框架-Memcache的例子

    1. 高性能:由于数据存储在内存中,Memcache的读写速度极快,显著提升了应用的响应速度。 2. 分布式:可以轻松扩展到多台服务器,以处理更大流量和数据量。 3. 简单易用:Memcache的API简单,支持多种编程语言,便于...

    ehcache和memcache性能比较

    在并发处理能力上,Memcached由于其无锁的设计,通常能更好地处理高并发请求,而Ehcache则需要考虑Java的锁机制,可能在并发性能上稍逊一筹。 适用场景上,如果项目主要基于Java,且需要持久化存储或者复杂的缓存...

    memcache 基本使用-已测试

    标题“memcache基本使用-已测试”涉及到的是一个关于Memcached缓存系统的基础教程或实践经验,其中可能包括如何安装、配置、以及在实际项目中如何使用Memcached来提高应用程序性能。描述中的“NULL”意味着没有提供...

    memcache 缓存 分布式

    Memcache是一种高性能的分布式内存对象缓存系统,它能够将数据存储在服务器的内存中,以减少对数据库的访问,从而显著提高网站的响应速度和处理能力。作为一款轻量级的缓存解决方案,Memcache在大型网站和高并发场景...

    linux下的memcache-2.2.4

    3. **内存存储**:所有的数据都存储在内存中,提供极快的读写速度,但数据非持久化,断电或重启后数据会丢失。 4. **过期机制**:每个存储的键值对都可以设置一个过期时间,超过这个时间,数据会被自动清除。 5. *...

    memcache-4.0.5.2.tgz

    Memcached 使用键值对(key-value)存储方式,允许开发者将数据存储在内存中,由于内存读取速度远超硬盘,因此能显著提升应用程序的响应速度。其主要特点包括: 1. **高性能**:Memcached 构建在libevent库之上,...

    memcache架构图

    由于数据存储在内存中,Memcached具有极快的读写速度。但这也意味着其存储容量受到物理内存的限制,且数据在服务重启后会丢失。因此,它适合存储临时、非持久化的数据,如会话信息。 3. **键值对操作** Memcached...

    JAVA+MYSQL+Memcached

    它通过将经常访问的数据暂存到内存中,避免了频繁的数据库读写操作,从而显著提升了响应速度。Memcached尤其适合那些读取操作远多于写入操作的系统,例如社交媒体网站和内容管理系统。 在Java中,我们可以使用各种...

    5.1 Memcache部署和使用-带书签-201809301

    例如,Java的memcached client、spymemcached和xmemcached等客户端可以配置多个Memcache服务器地址,当一个服务器不可用时,会自动切换到其他服务器。 总结,Memcache作为一个高效的内存缓存系统,其部署和使用涉及...

Global site tag (gtag.js) - Google Analytics