springboot redis缓存RedisCacheManager:将Java 序列化后的对象存储到redis中的字符串解读_redis


springboot redis缓存RedisCacheManager:将Java 序列化后的对象存储到redis中的字符串解读_spring boot_02

在这个例子中,序列化的对象是一个 User 类型的对象,它包含了三个属性:ageidname。下面是这个序列化字符串的解释:

原始序列化字符串:

"\xac\xed\x00\x05sr\x00\x1ccom.didispace.chapter54.User\x8a\x0e\x86s\x14\xd1\xc4\xfc\x02\x00\x03L\x00\x03aget\x00\x13Ljava/lang/Integer;L\x00\x02idt\x00\x10Ljava/lang/Long;L\x00\x04namet\x00\x12Ljava/lang/String;xpsr\x00\x11java.lang.Integer\x12\xe2\xa0\xa4\xf7\x81\x878\x02\x00\x01I\x00\x05valuexr\x00\x10java.lang.Number\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00xp\x00\x00\x00\nsr\x00\x0ejava.lang.Long;\x8b\xe4\x90\xcc\x8f#\xdf\x02\x00\x01J\x00\x05valuexq\x00~\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01t\x00\x03AAA"

解释:

  • \xac\xed\x00\x05:这是 Java 序列化的头部信息。
  • sr\x00\x1c com.didispace.chapter54.User:这是类 com.didispace.chapter54.User 的描述符。
  • L\x00\x03 age t\x00\x13 java/lang/Integer;:表示 age 字段是一个 java.lang.Integer 类型。
  • L\x00\x02 id t\x00\x10 java/lang/Long;:表示 id 字段是一个 java.lang.Long 类型。
  • L\x00\x04 name t\x00\x12 java/lang/String;:表示 name 字段是一个 java.lang.String 类型。
  • 接下来的内容是对每个字段的具体值进行序列化。
  • sr\x00\x11 java.lang.Integer:序列化的 Integer 对象。
  • I\x00\x05 valueInteger 对象的 value 属性。
  • xp\x00\x00\x00\nage 的值是 10
  • sr\x00\x0e java.lang.Long;:序列化的 Long 对象。
  • J\x00\x05 valueLong 对象的 value 属性。
  • xq\x00~\x00\x06id 的值是 0
  • t\x00\x03 AAAname 的值是 "AAA"

中文翻译:

"\xac\xed\x00\x05":Java 序列化头部信息。
"s":开始序列化一个对象。
"r\x00\x1c com.didispace.chapter54.User":表明接下来要序列化的对象属于 `com.didispace.chapter54.User` 类。
"\x8a\x0e\x86s\x14\xd1\xc4\xfc\x02\x00\x03":类版本号和其他元数据。
"L\x00\x03 age t\x00\x13 java/lang/Integer;":表示 `age` 字段是一个 `java.lang.Integer` 类型。
"L\x00\x02 id t\x00\x10 java/lang/Long;":表示 `id` 字段是一个 `java.lang.Long` 类型。
"L\x00\x04 name t\x00\x12 java/lang/String;":表示 `name` 字段是一个 `java.lang.String` 类型。
"x":结束序列化类信息。
"p":开始序列化对象的数据。
"s":再次开始序列化一个对象,这里是 `age` 的 `Integer` 值。
"r\x00\x11 java.lang.Integer":表明接下来要序列化的对象属于 `java.lang.Integer` 类。
"\x12\xe2\xa0\xa4\xf7\x81\x878\x02\x00\x01":类版本号和其他元数据。
"I\x00\x05 value":表示 `value` 字段是一个 `int` 类型。
"x":结束序列化 `Integer` 对象。
"r":开始序列化 `age` 的 `Number` 类型。
"r\x00\x10 java.lang.Number":表明接下来要序列化的对象属于 `java.lang.Number` 类。
"\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00":类版本号和其他元数据。
"x":结束序列化 `Number` 对象。
"p":继续序列化下一个字段。
"\x00\x00\x00\n":`age` 的值为 `10`。
"s":开始序列化 `id` 的 `Long` 值。
"r\x00\x0e java.lang.Long;":表明接下来要序列化的对象属于 `java.lang.Long` 类。
"\x8b\xe4\x90\xcc\x8f#\xdf\x02\x00\x01":类版本号和其他元数据。
"J\x00\x05 value":表示 `value` 字段是一个 `long` 类型。
"x":结束序列化 `Long` 对象。
"q":结束序列化 `id`。
"\x00~\x00\x06":`id` 的值为 `0`。
"t":开始序列化 `name` 的 `String` 值。
"\x00\x00\x00\x00\x00\x00\x00\x01":`id` 的长度为 `1`。
"t":开始序列化 `name`。
"\x00\x03 AAA":`name` 的值为 `"AAA"`。

这说明序列化后的 User 对象具有如下属性:

  • 年龄 age10
  • 用户 ID id0
  • 名称 name"AAA"