關於SpringBoot中RedisTeamplate序列化問題

第一種默認序列化(JDK序列化,也就是pojo implements Serializable)和   Jackson2JsonRedisSerializer 序列化(pojo可以不序列化)。

一 :都是通過opsforvalues來操作String類型。

User user = new User((long) 1,"ligeyu",5.5,110);
redisTemplate.opsForValue().set("people2",user);
Object people2 = redisTemplate.opsForValue().get("people2");


User user = new User((long) 1,"ligeyu",5.5,110);
objectRedisTemplate.opsForValue().set(user,user);
Object people2 = objectRedisTemplate.opsForValue().get(user);
[root@izuf6adx2cqtirb5x0fexez redis]# ./redis-cli 
127.0.0.1:6379> keys *
1) "\xac\xed\x00\x05sr\x00+com.example.yiyouliao.redis_test.model.Usera\xd5\xcd\x1d3\x11\"\xae\x02\x00\x04D\x00\x06heightL\x00\aclassNot\x00\x13Ljava/lang/Integer;L\x00\x02idt\x00\x10Ljava/lang/Long;L\x00\x04namet\x00\x12Ljava/lang/String;xp@\x16\x00\x00\x00\x00\x00\x00sr\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\x00nsr\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\x06ligeyu"
2) "name"
3) "people1"
4) "people2"
127.0.0.1:6379> get "\xac\xed\x00\x05sr\x00+com.example.yiyouliao.redis_test.model.Usera\xd5\xcd\x1d3\x11\"\xae\x02\x00\x04D\x00\x06heightL\x00\aclassNot\x00\x13Ljava/lang/Integer;L\x00\x02idt\x00\x10Ljava/lang/Long;L\x00\x04namet\x00\x12Ljava/lang/String;xp@\x16\x00\x00\x00\x00\x00\x00sr\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\x00nsr\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\x06ligeyu"
"\xac\xed\x00\x05sr\x00+com.example.yiyouliao.redis_test.model.Usera\xd5\xcd\x1d3\x11\"\xae\x02\x00\x04D\x00\x06heightL\x00\aclassNot\x00\x13Ljava/lang/Integer;L\x00\x02idt\x00\x10Ljava/lang/Long;L\x00\x04namet\x00\x12Ljava/lang/String;xp@\x16\x00\x00\x00\x00\x00\x00sr\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\x00nsr\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\x06ligeyu"
127.0.0.1:6379> get people2
"[\"com.example.yiyouliao.redis_test.model.User\",{\"id\":1,\"name\":\"ligeyu\",\"height\":5.5,\"classNo\":110}]"
127.0.0.1:6379> 

JDK序列化直接轉成了二進制字符串進行key和value的儲存,Json序列化直接轉Json字符串。

但在java代碼中取值都是一樣的  轉成java對象User(id=1, name=ligeyu, height=5.5, classNo=110)

二 :opsForHash() 兩種序列化的比較

-------------------------------JDK序列化---------------------------------------------------
private  RedisTemplate<Object,Object> objectRedisTemplate;
User user = new User((long) 1,"ligeyu",5.5,110);
HashMap<User, User> map = new HashMap<>(); //TreeMap也行,要寫比較方法。
map.put(user,user);
objectRedisTemplate.opsForHash().putAll("hash1",map);
Map<Object, Object> hash1 = objectRedisTemplate.opsForHash().entries("hash1");
System.out.println(hash1);
--------------------------------------------
{User(id=1, name=ligeyu, height=5.5, classNo=110)=User(id=1, name=ligeyu, height=5.5, classNo=110)}


---------------------------------JSON序列化-------------------------
private  RedisTemplate<String,Object> redisTemplate;

User user = new User((long) 1,"ligeyu",5.5,110);
Map<String, User> map = new TreeMap();
map.put("people",user);
redisTemplate.opsForHash().putAll("hash1",map);
Map<Object, Object> hash1 = redisTemplate.opsForHash().entries("hash1");
System.out.println(hash1);


127.0.0.1:6379> keys *
1) "\xac\xed\x00\x05t\x00\x05hash1"
127.0.0.1:6379> hget "\xac\xed\x00\x05t\x00\x05hash1"
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> hgetall "\xac\xed\x00\x05t\x00\x05hash1"
1) "\xac\xed\x00\x05sr\x00+com.example.yiyouliao.redis_test.model.Usera\xd5\xcd\x1d3\x11\"\xae\x02\x00\x04D\x00\x06heightL\x00\aclassNot\x00\x13Ljava/lang/Integer;L\x00\x02idt\x00\x10Ljava/lang/Long;L\x00\x04namet\x00\x12Ljava/lang/String;xp@\x16\x00\x00\x00\x00\x00\x00sr\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\x00nsr\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\x06ligeyu"
2) "\xac\xed\x00\x05sr\x00+com.example.yiyouliao.redis_test.model.Usera\xd5\xcd\x1d3\x11\"\xae\x02\x00\x04D\x00\x06heightL\x00\aclassNot\x00\x13Ljava/lang/Integer;L\x00\x02idt\x00\x10Ljava/lang/Long;L\x00\x04namet\x00\x12Ljava/lang/String;xp@\x16\x00\x00\x00\x00\x00\x00sr\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\x00nsr\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\x06ligeyu"
127.0.0.1:6379> 



127.0.0.1:6379> hgetall "hash1"
1) "people"
2) "[\"com.example.yiyouliao.redis_test.model.User\",{\"id\":1,\"name\":\"ligeyu\",\"height\":5.5,\"classNo\":110}]"

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章