Redis는 객체를 저장할 수 있지만 직렬화 및 역직렬화가 필요합니다.
왜 직렬화 인터페이스를 구현해야 합니까?
클래스가 직렬화 가능 인터페이스(이 인터페이스는 마커 인터페이스일 뿐이며 메서드 정의를 포함하지 않음)를 구현하는 경우 클래스를 직렬화할 수 있음을 의미합니다. 직렬화 가능 인터페이스의 객체를 바이트 시퀀스로 변환할 수 있습니다. 바이트 시퀀스를 파일 등으로 저장하면 나중에 언제든지 바이트 시퀀스를 원래 개체로 복원할 수 있습니다. 바이트 시퀀스는 복구를 위해 다른 컴퓨터에 저장되거나 네트워크를 통해 다른 컴퓨터로 전송될 수도 있습니다. 해당 클래스가 컴퓨터 플랫폼에 존재하는 한 정상적으로 원래 개체로 복원될 수 있습니다. 구현: 객체를 직렬화하려면 먼저 일부 OutputStream 객체를 생성한 다음 이를 ObjectOutputStream 객체에 캡슐화한 다음 writeObject() 메서드를 호출하여 객체를 직렬화해야 합니다.
참고: 객체 스트림을 사용하여 파일에 쓸 때 객체를 직렬화해야 할 뿐만 아니라 객체의 구성원 객체도 직렬화해야 합니다.
직렬화 가능 정보 인터페이스 클래스
serialVersionUID의 serialVersionUID는 긴 유형입니다. Eclipse에는 두 가지 생성 방법이 있습니다.
기본값은 1L입니다.
private static final long serialVersionUID = 1L;
다른 하나는 생성입니다. 클래스 이름, 인터페이스 이름, 멤버 메서드 및 속성을 기반으로 하는 64비트 해시 필드:
private static final long serialVersionUID = 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!