memcache 怎么存储的对象

WBOY
リリース: 2016-06-07 14:50:05
オリジナル
1215 人が閲覧しました

memchache 将对象序列化后保存 memcahce将值序列化成字节数组,然后存储到缓存中。 如下例,我们将user对象序列化到文件a.txt中,同时将user保存到缓存中,通过比较文件和缓存中的值 发现,两者是一样的。 public class User implements Serializable { priv

memchache 将对象序列化后保存

memcahce将值序列化成字节数组,然后存储到缓存中。

如下例,我们将user对象序列化到文件a.txt中,同时将user保存到缓存中,通过比较文件和缓存中的值
发现,两者是一样的。

<code class=" hljs java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">Serializable</span>{</span>

    <span class="hljs-keyword">private</span> String name;
    <span class="hljs-keyword">private</span> String address;



    <span class="hljs-keyword">public</span> <span class="hljs-title">User</span>(String name, String address) {
        <span class="hljs-keyword">super</span>();
        <span class="hljs-keyword">this</span>.name = name;
        <span class="hljs-keyword">this</span>.address = address;
    }
}</code>
ログイン後にコピー
<code class=" hljs cs"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span>(String[] args) throws InterruptedException, ExecutionException, FileNotFoundException, IOException {
         MemcachedClient mcc =  <span class="hljs-keyword">null</span>;
          <span class="hljs-keyword">try</span>{
             <span class="hljs-comment">// 本地连接 Memcached 服务</span>
              mcc = <span class="hljs-keyword">new</span> MemcachedClient(<span class="hljs-keyword">new</span> InetSocketAddress(<span class="hljs-string">"127.0.0.1"</span>, <span class="hljs-number">11211</span>));
             System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"Connection to server sucessful."</span>);



          }<span class="hljs-keyword">catch</span>(Exception ex){
             System.<span class="hljs-keyword">out</span>.println( ex.getMessage() );
          }

          User u = <span class="hljs-keyword">new</span> User(<span class="hljs-string">"junwang"</span>,<span class="hljs-string">"qingdao city"</span>);

          ObjectOutputStream oos = <span class="hljs-keyword">new</span> ObjectOutputStream(<span class="hljs-keyword">new</span> FileOutputStream(<span class="hljs-keyword">new</span> File(<span class="hljs-string">"a.txt"</span>)) );
          oos.writeObject(u);


          Future fo =  mcc.<span class="hljs-keyword">set</span>(<span class="hljs-string">"myuser"</span>, <span class="hljs-number">5</span>*<span class="hljs-number">60</span>*<span class="hljs-number">1000</span>, u);
          <span class="hljs-comment">// 查看存储状态</span>
          System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"set status:"</span> + fo.<span class="hljs-keyword">get</span>());

          <span class="hljs-comment">// 输出值</span>
          System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"myuser value in cache - "</span> + mcc.<span class="hljs-keyword">get</span>(<span class="hljs-string">"myuser"</span>));

          <span class="hljs-comment">// 关闭连接</span>
           mcc.shutdown();
       }</code>
ログイン後にコピー

这里写图片描述

查看源代码

查看源代码,可以发现正是将对象序列化,然后保存。证明了我们上述的猜想。

<code class=" hljs cs">BaseSerializingTranscoder.java

<span class="hljs-keyword">protected</span> <span class="hljs-keyword">byte</span>[] <span class="hljs-title">serialize</span>(Object o) {
    <span class="hljs-keyword">if</span> (o == <span class="hljs-keyword">null</span>) {
      <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> NullPointerException(<span class="hljs-string">"Can't serialize null"</span>);
    }
    <span class="hljs-keyword">byte</span>[] rv=<span class="hljs-keyword">null</span>;
    ByteArrayOutputStream bos = <span class="hljs-keyword">null</span>;
    ObjectOutputStream os = <span class="hljs-keyword">null</span>;
    <span class="hljs-keyword">try</span> {
      bos = <span class="hljs-keyword">new</span> ByteArrayOutputStream();
      os = <span class="hljs-keyword">new</span> ObjectOutputStream(bos);
      os.writeObject(o);
      os.close();
      bos.close();
      rv = bos.toByteArray();
    } <span class="hljs-keyword">catch</span> (IOException e) {
      <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> IllegalArgumentException(<span class="hljs-string">"Non-serializable object"</span>, e);
    } <span class="hljs-keyword">finally</span> {
      CloseUtil.close(os);
      CloseUtil.close(bos);
    }
    <span class="hljs-keyword">return</span> rv;
  }
</code>
ログイン後にコピー

结论

值的存储,都是序列化成字节数组,然后保存

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート