首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Redis 缓存系列:springboot整合redis(二)自定义序列器

Redis 缓存系列:springboot整合redis(二)自定义序列器

作者头像
一写代码就开心
发布2020-11-19 15:30:11
发布2020-11-19 15:30:11
5480
举报
文章被收录于专栏:java和pythonjava和python

我们在开发中,前后端传递对象是通过json格式,阿里巴巴有一个插件,就可以将我们创建的对象转化为json格式。

创建springboot项目,里面就集成了,我们使用的时候,直接创建这个jscksion的对象就可以了。具体的使用如下:

创建实体类

代码语言:javascript
复制
@Component
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {

    private  String name;
    private int age;
}

往redis里面直接存储对象

代码语言:javascript
复制
    @Test
    void test1() throws JsonProcessingException {
        User liu = new User("刘", 3);
        redisTemplate.opsForValue().set("user",liu);
        System.out.println(redisTemplate.opsForValue().get("user"));
    }

会报错

原因是我们的对象没有序列化,如何改变呢?直接在实体类上面实现序列化接口

代码语言:javascript
复制
@Component
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User  implements Serializable {

    private  String name;
    private int age;
}

这样就可以将对象直接存储在redis里面了。一般企业中的实体类都要序列化。

经常需要向Redis中保存Java中Object或List等类型,这个时候就需要通过序列化器把Java中对象转换为字符串进行存储。

自己写的redistemplates的配置

代码语言:javascript
复制
@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
            throws UnknownHostException {
//        我们为了开发方便,一般使用<String, Object>
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);


//        String 的序列化  对象
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();

//        key采用String的序列化方式
        template.setKeySerializer(stringRedisSerializer);
//        hash 的key采用String类型的序列化方式
        template.setHashKeySerializer(stringRedisSerializer);
//        value 序列化方式使用Jackson
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
//        hash 的value序列化采用Jackson
        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }
}
代码语言:javascript
复制
@SpringBootTest
class SpringbootRedisApplicationTests {
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    @Test
    void contextLoads() {

        redisTemplate.opsForValue().set("ff","dd");
        System.out.println(redisTemplate.opsForValue().get("ff"));
    }

    @Test
    void test1() throws JsonProcessingException {
        User liu = new User("刘", 3);
        redisTemplate.opsForValue().set("user",liu);
        System.out.println(redisTemplate.opsForValue().get("user"));
    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档