0 0

windows下java连接memcached出现NullPointerException15

windows:XP

memcached版本:memcached-1.2.1-win32
java client版本:java_memcached-release_1.6

public class testMemCached
{
    // 创建全局的唯一实例
    protected static MemCachedClient mcc = new MemCachedClient();
      protected static testMemCached memCached = new testMemCached();
    
    // 设置与缓存服务器的连接池
    static {
        // 服务器列表和其权重
        String[] servers = {"127.0.0.1:11211"};
        Integer[] weights = {3};
        // 获取socke连接池的实例对象
        SockIOPool pool = SockIOPool.getInstance();
        // 设置服务器信息
        pool.setServers( servers );
        pool.setWeights( weights );
        // 设置初始连接数、最小和最大连接数以及最大处理时间
        pool.setInitConn( 5 );
        pool.setMinConn( 5 );
        pool.setMaxConn( 250 );
        pool.setMaxIdle( 1000 * 60 * 60 * 6 );
        // 设置主线程的睡眠时间
        pool.setMaintSleep( 30 );
        // 设置TCP的参数,连接超时等
        pool.setNagle( false );
        pool.setSocketTO( 3000 );
        pool.setSocketConnectTO( 0 );
        // 初始化连接池
        pool.initialize();
        // 压缩设置,超过指定大小(单位为K)的数据都会被压缩
        mcc.setCompressEnable( true );
        mcc.setCompressThreshold( 64 * 1024 );
    }

    protected testMemCached()
    {}

    public static testMemCached getInstance()
    {
        return memCached;
    }
    
    public boolean add(String key, Object value)
    {
        return mcc.add(key, value);
    }
    
    public boolean add(String key, Object value, Date expiry)
    {
        return mcc.add(key, value, expiry);
    }
    
    public boolean replace(String key, Object value)
    {
        return mcc.replace(key, value);
    }
    
    public boolean replace(String key, Object value, Date expiry)
    {
        return mcc.replace(key, value, expiry);
    }
    
    public Object get(String key)
    {
        return mcc.get(key);
    }
    
    public boolean flushAll()
    {
        return mcc.flushAll();
    }
    
    public static void main(String[] args)
    {
        testMemCached cache = testMemCached.getInstance();
        cache.flushAll();
        
        for(int i=0; i<50000;i++){
          cache.add(i+"", "test");
        }

        String s = cache.get("0").toString();
        System.out.println(s);
    }
}
输出:com.danga.MemCached.MemCachedClient Sun Jan 08 14:42:19 CST 2012 - ++++ data successfully stored for key: 49998
com.danga.MemCached.MemCachedClient Sun Jan 08 14:42:19 CST 2012 - Storing with native handler...
com.danga.MemCached.MemCachedClient Sun Jan 08 14:42:19 CST 2012 - ++++ memcache cmd (result code): add 49999 0 0 5
 (STORED)
com.danga.MemCached.MemCachedClient Sun Jan 08 14:42:19 CST 2012 - ++++ data successfully stored for key: 49999
Exception in thread "main" java.lang.NullPointerException
 at utils.cache.testMemCached.main(testMemCached.java:90)

memcached启动语句:memcached.exe -l 127.0.0.1 -m 128 -d start

如果我只写入500条记录再读,是没有问题的,但是超过5000条记录就会出现空指针异常了。

请问是哪里出问题了?


问题补充:<div class="quote_title">renpeng301 写道</div><div class="quote_div"><pre name="code" class="java">

for(int i=0; i&lt;50001;i++){ 
          cache.add(i+"", "test"); 
        }
看看cache中的数量。。
</pre></div> <br />请问在哪里设置cache的数量?

问题补充:<div class="quote_title">renpeng301 写道</div><div class="quote_div"><pre name="code" class="java">
通过cache使用计数器

    使用storeCounter方法初始化一个计数器
    使用incr方法对计数器增量操作
    使用decr对计数器减量操作

然后你试试 是不是刚好循环到50000时 抛出 NullPointerException 


</pre> <br /></div> <br />改了下: <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cache.storeCount("count"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0; i&lt;50000;i++){ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cache.add(i+"", "test"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(cache.inrCount("count")); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />count从23106后就是-1了 <br />23106 <br />-1 <br />-1 <br />-1 <br />-1 <br /> <br />但是我把for中的i改成20000也是会出现空指针异常。 <br />应该怎么才可以实现保存50000个记录对的需求呢?

问题补充:<div class="quote_title">renpeng301 写道</div><div class="quote_div"><pre name="code" class="java">
int count=0
for(int i=0; i&lt;50001;i++){   
try{
         cache.add(i+"", "test");
  count++;
}catch(Exp....){
      System.out.print("error........");
}  
       } 

</pre></div> <br />这个不会有异常的啊,因为记录已经显示第49999条记录已经写入成功。而且我发现是因为前面的记录被覆盖掉了! <br />所以需要把memcached支持的记录数加大才对吧?
2012年1月08日 14:55

4个答案 按时间排序 按投票排序

0 0

但是我把for中的i改成20000也是会出现空指针异常。
应该怎么才可以实现保存50000个记录对的需求呢?
============================================
是不是有个地方可以设置缓存数的。。

忘记了。。


[color=red]所以需要把memcached支持的记录数加大才对吧? [/color]
对的

2012年1月08日 16:25
0 0

 int count=0
for(int i=0; i<50001;i++){    
try{
         cache.add(i+"", "test"); 
  count++;
}catch(Exp....){
      System.out.print("error........");
}   
       }  

2012年1月08日 15:40
0 0

通过cache使用计数器

    使用storeCounter方法初始化一个计数器
    使用incr方法对计数器增量操作
    使用decr对计数器减量操作 

然后你试试 是不是刚好循环到50000时 抛出 NullPointerException  



2012年1月08日 15:34
0 0


 for(int i=0; i<50001;i++){  
          cache.add(i+"", "test");  
        } 
看看cache中的数量。。

2012年1月08日 15:21

相关推荐

    java中连接memcached服务器

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

    java连接memcached示例代码

    Java连接Memcached是一种常见的缓存操作,特别是在处理大数据量或者需要快速响应的Web应用程序中。Memcached是一款高性能、分布式内存对象缓存系统,用于减轻数据库负载,提高网站性能。下面我们将详细探讨如何在...

    java连接memcached服务的jar

    java连接memcached服务的jar

    java_memcached-release_2.5.1.jar Memcache java jar 包

    `MemCachedManager.java`这个类可能包含了创建和管理Memcached连接、执行缓存操作等高级功能,简化了开发者的工作。 总的来说,Java Memcached客户端库是一个强大的工具,它让Java开发者能够利用Memcached的强大...

    java-memcached-2.6.6.jar

    java-memcached-2.6.6.jar

    java+memcached所需文件

    这里提供的文件包含在Windows环境下运行Memcached以及Java应用中集成Memcached所需的必要组件。 首先,我们来看"memcached-win64-1.4.4-14.zip",这是适用于Windows操作系统的Memcached服务器的64位版本。Memcached...

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

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

    memcached windows稳定版

    Windows下php中Memcache的安装: 1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached 2. 在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装 3. 再输入: ‘c...

    使用JAVA连接Memcached的DEMO源码(2016)

    使用JAVA连接Memcached的DEMO源码(2016)。 自己写的一个连接memcached的小DEMO,适合刚开始学习分布式缓存的同学下载学习。

    java使用memcached的实例

    本文详细介绍了如何在Java项目中使用Memcached进行数据缓存,包括Spring框架下的配置方式以及具体的代码实现。通过理解和掌握这些知识点,开发者可以有效地利用Memcached提升JavaWeb应用的性能和效率。

    java_memcached-release_1.6.zip

    Java Memcached是一个基于Java的客户端库,用于与Memcached服务器进行通信。Memcached是一种高性能、分布式内存对象缓存系统,广泛应用于减轻数据库负载,提高Web应用的响应速度。在Java应用中,Java Memcached...

    java_memcached-release_2.6.2.jar

    java_memcached-release_2.6.2.jar java缓存工具 memcached

    java使用Memcached简单教程

    ### Java使用Memcached简单教程 #### 一、简介 Memcached是一个高性能的分布式内存对象缓存系统,通过减轻数据库负载来加速动态Web应用,提高网站的浏览速度。它通过在内存中缓存数据和对象来减少读取数据库的次数...

    Java环境下Memcached应用详解.docx

    【Java环境下Memcached应用详解】 Memcached是一款高性能的分布式内存对象缓存系统,常用于缓解数据库的压力,提高网站性能。在Java环境下,Memcached能够作为集群环境下的缓存解决方案,适用于处理大量数据并需要...

    java_memcached-release_2.6.3.zip

    在Java Memcached客户端中,它用于管理连接池,即高效地重复使用已经创建的对象,而不是每次需要时都创建新的对象,这可以显著提高性能并减少系统资源的消耗。 2. **java_memcached-release_2.6.3.jar**:这是Java ...

    java_memcached-release_2.6.6.jar及其依赖包

    在Java Memcached客户端中,它被用来有效地管理和复用连接到Memcached服务器的Socket对象,减少创建和销毁对象的开销,从而提高系统性能。 `slf4j-api-1.6.1.jar`和`slf4j-simple-1.6.1.jar`是Simple Logging ...

    java_memcached-release_2.6.6.rar

    1. **连接管理**:Java Memcached客户端需要建立到Memcached服务器的连接。这些连接通常可以是持久的,也可以是短暂的,取决于应用的需求。客户端会处理连接的创建、维护和关闭,以确保高效且可靠的通信。 2. **Key...

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

    Java Memcached客户端是Java开发者用来与Memcached分布式内存缓存系统进行交互的工具。这个`java_memcached-release_2.6.3.rar`压缩包包含了用于Java客户端开发所需的全部依赖库,使得开发者能够轻松地在Java应用中...

    windows下memcached+memcached.dll 5.3.8

    标题中的“Windows下memcached+memcached.dll 5.3.8”指的是在Windows操作系统上安装和使用Memcached服务的场景,其中`memcached.dll 5.3.8`是Memcached服务器的一个特定版本的动态链接库文件。Memcached是一款高...

Global site tag (gtag.js) - Google Analytics