redis序列化

redis序列化

JdkSerializationRedisSerializer

这种序列化方式是RedisTemplate默认的序列化方式,使用这种序列化方式的前提:被序列化的对象必须实现了java.io.Serializable接口。这种方式序列化之后保存的是字节序列,对于开发调试不太友好,使用Redis客户端打开都是乱码的。

先创建User对象,在实现Serializable序列化接口,使用RedisTemplate向redis中插入数据。

public class User implements Serializable{
    private static final long serialVersionUID = 1L;
    private String name;
    private Integer age;
}
void redisAddTest() {
        User user = new User();
        user.setName("我是1号");
        user.setAge(11);
        redisTemplate.opsForValue().set("user:1",user);
    }

在客户端中查看数据
redis序列化_第1张图片

StringRedisSerializer

这种序列化方式是StringRedisTemplate默认的序列化方式。这种实现方式比较轻量级、效率比较高,但是这种方式只能对字符串进行序列化,无法对普通对象进行序列化。如果想对普通对象进行序列化,必须先手动转化成String格式(可以使用fastJson)。

void redisAddTest() {
        User user = new User();
        user.setName("我是1号");
        user.setAge(11);
        stringRedisTemplate.opsForValue().set("user:1",JSON.toJSONString(user));
    }

在客户端中查看数据
redis序列化_第2张图片

Jackson2JsonRedisSerializer

这种序列化方式是通过将对象序列化成json串进行存储的,但是这种序列化方式,必须在构造序列化对象时传入对象的类型,否则会导致反序列化错误。

使用@Cacheable注解以及自定义CaChe的方式进行验证
自定义Cache序列化

@Bean
    public RedisCacheManager employeeRedisCacheManager(RedisConnectionFactory redisConnectionFactory) {
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                // 设置缓存过期时间为一天
                .entryTtl(Duration.ofDays(1))    
               // 设置CacheManager的值序列化方式为json序列化,
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new Jackson2JsonRedisSerializer(Object.class)));
        // 设置默认的cache组件
        return RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(redisCacheConfiguration).build();
    }

使用Cacheable注解

@Cacheable(cacheNames = "user",unless = "#result.size()==0",key = "#root.methodName")
    public List<User> add() {
        List<User> user = getUser();
        return user;
    }

redis客户端数据
redis序列化_第3张图片

GenericJackson2JsonRedisSerializer

这种序列化方式是对Jackson2JsonRedisSerializer的一种补充,也是将对象序列化成json串进行存储,序列化时将对象类型也保存了,所以反序列化时无需传入对象类型
同样自定义CaChe序列化

@Bean
    public RedisCacheManager employeeRedisCacheManager(RedisConnectionFactory redisConnectionFactory) {
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                // 设置缓存过期时间为一天
                .entryTtl(Duration.ofDays(1))
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
        // 设置默认的cache组件
        return RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(redisCacheConfiguration).build();
    }

redis客户端中数据
redis序列化_第4张图片

你可能感兴趣的:(redis,redis)