ホームページ > データベース > Redis > Redis はオブジェクトを保存できますか?

Redis はオブジェクトを保存できますか?

anonymity
リリース: 2019-06-04 16:25:01
オリジナル
3008 人が閲覧しました

Redis はオブジェクトを保存できますが、シリアル化と逆シリアル化が必要です。

Redis はオブジェクトを保存できますか?

なぜシリアル化インターフェイスを実装する必要があるのでしょうか?

クラスが Serializable インターフェイスを実装している場合 (このインターフェイスはマーク インターフェイスのみであり、メソッド定義は含まれていません)、それはクラスがシリアル化できることを意味します。 Serializable インターフェイスを実装するクラス。オブジェクトはバイト シーケンスに変換できます。バイト シーケンスを (ファイルなどに) 保存すると、後でいつでもバイト シーケンスを元のオブジェクトに復元できます。バイト列を他のコンピュータに置いたり、ネットワーク経由で他のコンピュータに送信して復元することも可能で、対応するクラスがコンピュータプラットフォーム上に存在する限り、通常どおり元のオブジェクトに復元できます。実装: オブジェクトをシリアル化するには、まずいくつかの OutputStream オブジェクトを作成し、次にそれらを ObjectOutputStream オブジェクトにカプセル化し、次に writeObject() メソッドを呼び出してオブジェクトをシリアル化する必要があります。逆シリアル化も同様です。

注: オブジェクト ストリームを使用してファイルに書き込む場合、オブジェクトをシリアル化するだけでなく、オブジェクトのメンバー オブジェクトもシリアル化する必要があります。シリアル化可能なインターフェイスserialVersionUID:

serialVersionUIDはlong型です。 Eclipse には 2 つの生成メソッドがあります。

デフォルトは 1L です:

private static Final longserialVersionUID = 1L;

もう 1 つはクラス名とインターフェイスに基づきます。 name 、メンバーのメソッドと属性などは、64 ビットのハッシュ フィールドを生成します。

private staticfinallongserialVersionUID = 3969438177161438988L;

serialVersionUID は、主にオブジェクトの逆シリアル化の互換性の問題を解決するためのものです。

serialVersionUID が指定されていない場合、オブジェクトがシリアル化されてハード ディスクに保存された後、クラスのフィールドが増加または減少します。このように、逆シリアル化時に例外が発生し、非互換性の問題が発生します。

ただし、serialVersionUID が同じ場合、デフォルト値の type で異なるフィールドが逆シリアル化されます。こうすることで、非互換性の問題を回避できます。

上記の方法は Java オブジェクトにのみ復元できます。他のオブジェクト (C オブジェクトなど) に復元したい場合は、Java オブジェクトをさまざまなオブジェクトで使用できるように XML 形式に変換する必要があります。プラットフォームとさまざまな言語の使用。 JDK とともに配布される javax.xam.* クラス ライブラリを使用することも、オープン ソースの XOM クラス ライブラリを使用することもできます (

www.xom.nu からダウンロードして文書化できます)。

実験ケース:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import bean.Person;
import redis.clients.jedis.Jedis;
public class SerializeUtil {
    public static void main(String [] args){
        Jedis jedis = new Jedis("172.16.135.2");
        String keys = "name";
        // 删数据
        //jedis.del(keys);
        // 存数据
        jedis.set(keys, "zy");
        // 取数据
        String value = jedis.get(keys);
        System.out.println(value);
        
        //存对象
        Person p=new Person();  //peson类记得实现序列化接口 Serializable
        p.setAge(20);
        p.setName("姚波");
        p.setId(1);
        jedis.set("person".getBytes(), serialize(p));
        byte[] byt=jedis.get("person".getBytes());
        Object obj=unserizlize(byt);
        if(obj instanceof Person){
            System.out.println(obj);
        }
    }
    
    //序列化 
    public static byte [] serialize(Object obj){
        ObjectOutputStream obi=null;
        ByteArrayOutputStream bai=null;
        try {
            bai=new ByteArrayOutputStream();
            obi=new ObjectOutputStream(bai);
            obi.writeObject(obj);
            byte[] byt=bai.toByteArray();
            return byt;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    //反序列化
    public static Object unserizlize(byte[] byt){
        ObjectInputStream oii=null;
        ByteArrayInputStream bis=null;
        bis=new ByteArrayInputStream(byt);
        try {
            oii=new ObjectInputStream(bis);
            Object obj=oii.readObject();
            return obj;
        } catch (Exception e) {
            
            e.printStackTrace();
        }
    
        
        return null;
    }
}
ログイン後にコピー

以上がRedis はオブジェクトを保存できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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