`
dengyin2000
  • 浏览: 1224704 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用spy memcached导入大量数据到memcache server中,避免Out Of Memory错误。

阅读更多
MemcachedClient的set方法其实是异步的。 并不是当set执行完时, 数据就已经存在server上了。所以set的返回值是Future<Boolean>, 你可以通过这个值来判定是否已经保存到server上了。可以通过以下的代码来确认值已经保存到server了。

Future<boolean> b = client.set("testkey",3600,"value");
boolean done = false;
do{
 Thread.sleep(200);
 done = b.get().booleanValue();
}while(!done);
System.out.println("value has been saved.");



MemcachedClient在本地存在一个队列,这个队列存放着需要set的任务。如果你需要一次调用非常多次的set方法的话, 这时候就会发生out of memory的error。解决办法就是调用waitForQueues方法。 如下:

    public void testPutBatchContent(){

        long start = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            client.set("testkey" + i, 0, content);
            if (i % 10000 == 0) {
                System.out.println("finished. " + i);
                boolean b = client.waitForQueues(300, TimeUnit.SECONDS);
                System.out.println("finished. " + b);
            }
        }
        boolean b = client.waitForQueues(300, TimeUnit.SECONDS);
        System.out.println("Costs " + (System.currentTimeMillis() - start) + " ms.");
    }


waitForQueues方法会等待队列完全被消费掉。 有个参数可以设置timeout时间。 我这里是300秒。总共要set10万次, 每10000次就让队列消费掉。这样就不会发生out of memory的问题了。
1
1
分享到:
评论
1 楼 xzh_endless 2010-01-18  
我遇到了和你完全一样的问题。
我用了spy memcache ,同样是因为memcache client for java和另外一个mmclient
连自带的例子都有问题,放的进去去不出来。

内存溢出的问题我也遇到了,set过多过快。
dump对象出来之后发现很多storeImpl的实例
也有大量的调用接口返回的结果的对象,Future<XXX>这个东西也是必须返回的。
所以我通过获取一下返回结果就可以解决了OOM的问题。
没大细看SPY的CLIENT ,总感觉现在的三方包都太不靠谱了。

相关推荐

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

    1. **并发和一致性**:由于 Memcached 是无状态的,因此在多线程环境中,需确保正确地处理并发访问,避免数据冲突。 2. **数据持久化**:Memcached 不提供内置的持久化机制,若需要持久化数据,需要在应用层面实现。...

    nginx+tomcat8.0+memcached1.5 session共享所需jar包

    为了设置session共享,你需要在Tomcat的配置文件(如`context.xml`或`server.xml`)中配置Memcached Session Manager,并指定Spy Memcached为客户端,同时在Nginx配置中启用session sticky或负载均衡策略。...

    java memcache使用例子

    本篇文章将围绕"Java Memcache使用例子"这一主题,详细介绍如何在Java中使用Memcached。 首先,确保您已经在本地正确安装了Memcached。通常,Memcached可以在Linux、macOS和Windows等操作系统上运行。你可以通过...

    java使用memcached demo

    - 合理设置过期时间,避免大量数据同时过期导致性能下降。 - 使用分布式锁处理并发更新问题。 9. **监控和扩展** 可以使用第三方工具(如`mcstat`)监控Memcached的性能,确保其正常运行。随着数据量的增加,...

    spy3使用教程

    同时,对于实时监控产生的大量数据,缓冲区管理机制确保了数据的高效存储与读取,避免了因数据溢出而导致的信息丢失。 ##### 4. 数据发送与工程文件加载 除了数据接收,spy3还支持数据发送功能,允许用户向网络...

    用Memcached 实现简单Session Cache Server

    在实现Session Cache Server时,我们将Memcached作为存储Session的地方,当Tomcat服务器处理用户请求时,会将Session数据发送到Memcached,其他服务器在处理相同用户的请求时,可以直接从Memcached获取Session数据,...

    spy memcached

    memcache spy client,

    memcached所需要的jar包---tomcat8.0

    描述中的"memcached实现session共享,基于tomcat8.0,采用kryo序列化",意味着开发者计划使用Kryo库进行对象序列化,以便将session数据存储到Memcached中。Kryo是一个快速、高效的序列化库,适合Java和Scala。相比...

    myeclipse配置p6spy以及导入源码

    原配置中使用的驱动应更改为P6Spy提供的驱动,即com.p6spy.engine.spy.P6SpyDriver。这样,所有的数据库连接都会通过P6Spy的代理驱动,从而使P6Spy能够拦截和记录所有数据库操作。这一更改通常在应用程序的数据库...

    缓存服务器memcached代码及使用文档

    Memcached通过TCP协议进行通信,服务器端接收客户端的请求,将数据存储到内存中,并为每个数据项设置一个过期时间。当客户端需要数据时,会首先查询Memcached,如果缓存中有数据,就直接返回,称为缓存命中;如果...

    Memcached负载均衡Jar包大全

    Java应用可以通过使用特定的Memcached客户端库(如spymemcached或Xmemcached)将用户的会话数据存储到Memcached服务器集群中。这些jar包可能包含了这些客户端库的实现,使得开发者可以轻松集成到自己的项目中。 ...

    memcached_net.spy_com.danga JAR

    Memcache java jar 包 java_memcached-release_2.5.1.jar import com.danga.MemCached.MemCachedClient; import net.spy.memcached.MemcachedClient;

    memcached连接demo

    **Memcached连接Demo详解** Memcached是一款高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载,...通过学习这些示例,你将能够自如地在自己的项目中使用Memcached,实现高效的数据缓存。

    java使用Memcached简单教程

    为了在Java项目中使用Memcached,我们需要引入一个客户端库。在这里,我们选择使用SpyMemcached作为客户端。首先,在Maven项目的`pom.xml`文件中添加以下依赖: ```xml &lt;groupId&gt;net.spy&lt;/groupId&gt; &lt;artifactId&gt;...

    Memcached java的使用实例

    接下来,让我们看看如何在Java代码中使用Memcached。首先,我们需要创建一个`MemcachedClient`实例,连接到运行的Memcached服务器: ```java import net.spy.memcached.AddrUtil; import ...

    java连memcached的驱动 spymemcached-2.10.3.jar

    System.out.println("Connection to server sucessful."); // 添加数据 Future fo = mcc.set("runoob", 900, "Free Education"); // 打印状态 System.out.println("set status:" + fo.get()); // 输出 ...

    java中连接memcached服务器

    Java连接Memcached服务器是开发过程中常见的一环,尤其是在构建分布式系统时,利用Memcached作为缓存服务可以显著提升数据访问速度。Memcached是一款高性能、分布式内存对象缓存系统,能够临时存储键值对数据,减轻...

    memcached安装包以及MemCachedClient

    **Memcached 安装与使用详解** Memcached 是一款高性能的分布式内存缓存系统,用于在Web应用中减轻数据库负载。它将数据存储在内存中,以键值对的形式提供快速访问,尤其适用于高并发场景。Memcached 使用简单,可...

    java连接memcached示例代码

    下面我们将详细探讨如何在Java中使用Memcached以及相关知识点。 首先,我们需要引入一个Java库来与Memcached通信,例如spymemcached或xmemcached。这两个库提供了Java客户端,方便我们进行API调用。这里以...

    simple-spring-memcached集成memcache

    在IT行业中,Spring框架是Java应用开发中的一个关键组件,它提供了一整套服务和工具,使得开发者可以更高效地构建可维护、可扩展的应用。而Memcached则是一种高性能、分布式内存对象缓存系统,常用于缓解数据库负载...

Global site tag (gtag.js) - Google Analytics