目次
memchache 将对象序列化后保存
查看源代码
结论

memcache 怎么存储的对象

Jun 07, 2016 pm 02:50 PM
memcache ストレージ 物体 どうやって

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>
ログイン後にコピー

结论

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

GIGABYTE マザーボードでキーボード ブート機能を設定する方法 (GIGABYTE マザーボードでキーボード ブート モードを有効にする) GIGABYTE マザーボードでキーボード ブート機能を設定する方法 (GIGABYTE マザーボードでキーボード ブート モードを有効にする) Dec 31, 2023 pm 05:15 PM

Gigabyte のマザーボードでキーボード起動を設定する方法 まず、キーボード起動をサポートする必要がある場合は、PS2 キーボードである必要があります。 !設定手順は次のとおりです: ステップ 1: 起動後に Del または F2 を押して BIOS に入り、BIOS の Advanced (Advanced) モードに移動します 通常のマザーボードは、デフォルトでマザーボードの EZ (Easy) モードに入ります。 F7 を押してアドバンスト モードに切り替える必要があります。ROG シリーズ マザーボードはデフォルトで BIOS に入ります。アドバンスト モード (説明には簡体字中国語を使用します) ステップ 2: - [アドバンスト] - [アドバンスト パワー マネージメント (APM)] を選択します。 ステップ 3 : オプション [PS2 キーボードによるウェイクアップ] を見つけます ステップ 4: このオプション デフォルトは無効です プルダウンすると、3 つの異なる設定オプションが表示されます: [スペースバー] を押してコンピューターの電源をオンにし、グループを押します

ファーウェイは革新的なMEDストレージ製品を来年発売予定:ラック容量は10PBを超え、消費電力は2kW未満 ファーウェイは革新的なMEDストレージ製品を来年発売予定:ラック容量は10PBを超え、消費電力は2kW未満 Mar 07, 2024 pm 10:43 PM

このウェブサイトは3月7日、ファーウェイのデータストレージ製品ラインの社長である周岳峰博士が最近MWC2024カンファレンスに出席し、特にウォームデータ(WarmData)とコールドデータ(ColdData)用に設計された新世代のOceanStorArctic磁電ストレージソリューションをデモンストレーションしたと報じた。ファーウェイのデータストレージ製品ラインの社長である周岳峰氏は、一連の革新的なソリューションをリリースした 画像出典: このサイトに添付されているファーウェイの公式プレスリリースは次のとおりです: このソリューションのコストは磁気テープのコストより 20% 低く、そのコストは磁気テープのコストよりも 20% 低くなります。消費電力はハードディスクよりも90%低いです。外国のテクノロジーメディアのblocksandfilesによると、ファーウェイの広報担当者も磁気電子ストレージソリューションに関する情報を明らかにした:ファーウェイの磁気電子ディスク(MED)は磁気ストレージメディアの主要な革新である。初代ME

Shenzhou Xuanlong m7e8s3 で独立したグラフィックス カードの直接接続を有効にする方法は? Shenzhou Xuanlong m7e8s3 で独立したグラフィックス カードの直接接続を有効にする方法は? Jan 04, 2024 am 09:24 AM

Shenzhou Xuanlong m7 の独立したグラフィックス カードの直接接続を有効にする方法. Shenzhou Xuanlong m7 の独立したグラフィックス カードの直接接続機能を有効にするには、次の手順に従います。独立したグラフィックカードのドライバーをインストールしました。神州の公式 Web サイトまたは独立系グラフィック カード メーカーの公式 Web サイトにアクセスして、グラフィック カード モデルに適した最新のドライバーをダウンロードしてインストールできます。 2. コンピュータのデスクトップで、空白スペースを右クリックし、ポップアップ メニューで [NVIDIA コントロール パネル] を選択します (AMD グラフィック カードの場合は、[AMDRadeon 設定] を選択します)。 3. コントロール パネルで、「3D 設定」または同様の名前のオプションを見つけ、クリックして入力します。 4. [3D 設定] で、[グローバル設定] または同様の名前のオプションを見つける必要があります。ここで、一意の使用を指定できます

MySQLクエリ結果の配列をオブジェクトに変換するにはどうすればよいですか? MySQLクエリ結果の配列をオブジェクトに変換するにはどうすればよいですか? Apr 29, 2024 pm 01:09 PM

MySQL クエリ結果の配列をオブジェクトに変換する方法は次のとおりです。 空のオブジェクト配列を作成します。結果の配列をループし、行ごとに新しいオブジェクトを作成します。 foreach ループを使用して、各行のキーと値のペアを新しいオブジェクトの対応するプロパティに割り当てます。新しいオブジェクトをオブジェクト配列に追加します。データベース接続を閉じます。

Ubuntu での Git インストール プロセス Ubuntu での Git インストール プロセス Mar 20, 2024 pm 04:51 PM

Git は、高速で信頼性が高く、適応性に優れた分散バージョン管理システムです。分散型の非線形ワークフローをサポートするように設計されており、あらゆる規模のソフトウェア開発チームに最適です。各 Git 作業ディレクトリは、すべての変更の完全な履歴を備えた独立したリポジトリであり、ネットワーク アクセスや中央サーバーがなくてもバージョンを追跡できます。 GitHub は、分散リビジョン管理のすべての機能を提供する、クラウド上でホストされる Git リポジトリです。 GitHub は、クラウド上でホストされる Git リポジトリです。 CLI ツールである Git とは異なり、GitHub には Web ベースのグラフィカル ユーザー インターフェイスがあります。これは、他の開発者との共同作業や、スクリプトへの変更の追跡などのバージョン管理に使用されます。

ナイキシューズの靴箱の本物と偽物の見分け方(簡単に見分けるコツをマスター) ナイキシューズの靴箱の本物と偽物の見分け方(簡単に見分けるコツをマスター) Sep 02, 2024 pm 04:11 PM

世界的に有名なスポーツブランドとして、ナイキのシューズは大きな注目を集めています。しかし、市場にはナイキの偽物の靴箱などの偽造品も多数出回っています。消費者の権利と利益を保護するには、本物の靴箱と偽物の靴箱を区別することが重要です。この記事では、本物の靴箱と偽物の靴箱を見分けるための簡単で効果的な方法をいくつか紹介します。 1: 外箱のタイトル ナイキの靴箱の外箱を観察すると、多くの微妙な違いを見つけることができます。ナイキの純正靴箱は通常、手触りが滑らかで、明らかな刺激臭のない高品質の紙素材を使用しています。本物の靴箱のフォントとロゴは通常、鮮明で詳細で、ぼやけや色の不一致はありません。 2: ロゴのホットスタンプのタイトル。ナイキの靴箱のロゴは通常、純正の靴箱のホットスタンプ部分に表示されます。

CF を再生するときの Savior y7000p の解像度はどれくらいですか (Savior y7000 で CF を再生するときに全画面を調整する方法) CF を再生するときの Savior y7000p の解像度はどれくらいですか (Savior y7000 で CF を再生するときに全画面を調整する方法) Jan 07, 2024 am 10:13 AM

CF 再生時の Savior Y7000P の解像度はどれくらいですか? CF 再生時の Savior Y7000P の解像度は 1920*1080 です。このコンピューターには GTX1650 グラフィックス カードと i5-9300H プロセッサーが搭載されているため、そのパフォーマンスは比較的良好で、CF などのゲームのニーズを満たすのに十分です。同時に、1920*1080は現在の主流のeスポーツモニターの解像度であり、画質と鮮明さは十分です。また、より高い要件を持つプレイヤーがいる場合は、ゲームの画質設定を適切に下げることで、よりスムーズなゲーム体験を得ることができます。より鮮明な視覚体験を楽しむために、Savior y7000p の解像度を 2560*1400 に調整できます。より高画質な映像表示をお楽しみいただけます。 Savior Y7000P 2022年モデルを搭載

sessionStorage を正しく使用して機密データを保護する方法 sessionStorage を正しく使用して機密データを保護する方法 Jan 13, 2024 am 11:54 AM

sessionStorage を正しく使用して機密情報を保存する方法には、特定のコード サンプルが必要です。Web 開発でもモバイル アプリケーション開発でも、ユーザーのログイン資格情報や ID 番号などの機密情報を保存して処理する必要があることがよくあります。フロントエンド開発では、sessionStorage の使用が一般的なストレージ ソリューションです。ただし、sessionStorage はブラウザベースのストレージであるため、保存されている機密情報が悪意を持ってアクセスされ、使用されないように、いくつかのセキュリティ問題に注意を払う必要があります。

See all articles