memcached组件缓存的对象必须实现序列化

在测试用Memcached组件缓存对象的时候,发现总是无法正确存储,保存的地方也没有报告任何异常,从服务器控制台看到的信息也没有保存成功的信息,但是取数据的时候,取出来的也是空的,在获取user对象name属性的地方抛出了空指针异常。很显然没有保存成功,这是为什么呢?昨天用字符串测试都OK,今天用对象就不行了呢?Memcached不号称是内存对象缓存组件吗?

想了下,终于知道为什么了?因为Memcached有独立的服务器端组件,是独立于应用系统的,从客户端(应用系统)保存对象到memcached是必须通过网络传输,而网络传入都是2进制数据,所以必须经过序列化,否则无法存储到Memcached服务器端的缓存中。而昨天测试的字符串成功是因为Java的String对象本身已经实现了序列化接口。于是将需要缓存的User对象序列化处理,然后再次测试,一切OK.

部分测试代码如下:

    public void put(String key,Object value)
    {   
     long start = System.nanoTime();
     memcachedClient.set(key, value);   
        System.out.println("put time :" + (System.nanoTime()-start)/1000000D);
    }

    public User get(String key)
    {   
     long start = System.nanoTime();
     User obj =  (User)memcachedClient.get(key);  
        System.out.println("get time :" + (System.nanoTime()-start)/1000000D);
        return obj;
    }

    public static void main(String[] args) 
    {      
     CacheClient cache = new CacheClient();
     User user = ObjectFactory.createUser(32);
     cache.put("32", user);
     user = cache.get("32");
     System.out.println(user.getName());
    } 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值