第一种默认序列化(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}]"