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 サイトの他の関連記事を参照してください。