关于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}]"

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值