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