美文网首页
Redis——RedisTemplate

Redis——RedisTemplate

作者: haha_writing | 来源:发表于2020-08-12 17:27 被阅读0次

            大部分的情况下,我们使用RedisTemplate来实现和redis数据库的交互。

            RedisTemplate是Redis模块的中心类,它为与Redis的交互提供了一个高级抽象。RedisConnection提供低级方法,接收和返回二进制数组,RedisTemplate则负责序列化和连接管理,使用户不用处理这些细节。官方文档中,RedisTemplate定义为:performs automatic serialization/deserialization between the given objects and the underlying binary data in the Redis Store。

            RedisTemplate一旦配置好,就是线程安全的,可供多个实例重用。

            RedisTemplate的大多数操作都使用基于Java的序列化程序。这意味着它读写的任何对象都通过Java进行序列化和反序列化。你可以更改序列化机制(org.springframework.data.redis.serializer中提供了几种实现)。RedisCache和RedisTemplate默认的情况下使用JdkSerializationRedisSerializer。对于JSON格式的数据,可以使用Jackson2JsonRedisSerializer或者GenericJackson2JsonRedisSerialize。对于String密集型操作,可以考虑StringRedisTemplate。

            典型的配置,如下所示:

    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {

            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();

            redisTemplate.setConnectionFactory(redisConnectionFactory);

           Jackson2JsonRedisSerializer<Object> j2jrs = new Jackson2JsonRedisSerializer<>(Object.class);

           ObjectMapper om = new ObjectMapper();

           om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

           // 解决jackson2无法反序列化LocalDateTime的问题

            om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

            om.setTimeZone(TimeZone.getTimeZone("GMT+8"));

            om.findAndRegisterModules();

            om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);

             j2jrs.setObjectMapper(om);

           // 序列化 value 时使用此序列化方法

            redisTemplate.setValueSerializer(j2jrs);

            redisTemplate.setHashValueSerializer(j2jrs);

           // 序列化 key 时

            StringRedisSerializer srs = new StringRedisSerializer();

           redisTemplate.setKeySerializer(srs);

           redisTemplate.setHashKeySerializer(srs);

           redisTemplate.afterPropertiesSet();

           return redisTemplate;

    }

    相关文章

      网友评论

          本文标题:Redis——RedisTemplate

          本文链接:https://www.haomeiwen.com/subject/mblorktx.html