栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot data redis 优雅的存取java实体类对象

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot data redis 优雅的存取java实体类对象

文章目录
    • 前言
    • 项目结构
    • 配置类:(实现redis的序列化)
      • FastJsonRedisSerializer.java
      • RedisConfig.java
    • 实体类 UserVO.java
    • util
      • RedisObjUtil.java
    • 测试类
    • 运行结果

前言

RedisTemplate是spring封装的操作redis的接口,使用起来很方便,但也有很多坑,比如存储javabean类。这里将使用fastjson实现序列化。非常滴人性!话不多说直接上demo

项目结构
|_config:配置文件目录
	|_FastJsonRedisSerializer.java
	|_RedisConfig.java
|_util
	|_RedisObjUtil.java
|_vo
	|_UserVo.java
配置类:(实现redis的序列化) FastJsonRedisSerializer.java
package com.king.mooc.config;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;


public class FastJsonRedisSerializer implements RedisSerializer {

    public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;

    private final Class clazz;

    public FastJsonRedisSerializer(Class clazz) {
        super();
        this.clazz = clazz;
    }

    @Override
    public byte[] serialize(T t) throws SerializationException {
        if (t == null) {
            return new byte[0];
        }
        return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
    }

    @Override
    public T deserialize(byte[] bytes) throws SerializationException {
        if (bytes == null || bytes.length <= 0) {
            return null;
        }
        String str = new String(bytes, DEFAULT_CHARSET);
        return (T) JSON.parseObject(str, clazz);
    }

}
RedisConfig.java
package com.king.mooc.config;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.support.config.FastJsonConfig;

import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {


    RedisConfig(){
        //打开autotype功能,需要强转的类一次添加其后
        ParserConfig.getGlobalInstance()
                .addAccept("com.king.mooc.vo.UserVo");
    }

    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
        RedisTemplate template =new RedisTemplate<>();
        //template .setConnectionFactory(redisConnectionFactory);
        FastJsonRedisSerializer fastJsonRedisSerializer=new FastJsonRedisSerializer<>(Object.class);
        template.setValueSerializer(fastJsonRedisSerializer);
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(fastJsonRedisSerializer);
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setConnectionFactory(redisConnectionFactory);
        return template;

    }

    @Bean
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
        StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }

}


 
实体类 UserVO.java 
package com.king.mooc.vo;

import com.king.mooc.bean.User;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDateTime;


@Data
public class UserVo implements Serializable {
    private Long id;
    private String name;
    //头像
    private String headImg;
    private String email;
    private Long phone;
    //是否为会员
    private Boolean isVip = false;
    private String validateCode;


    public void setUser(User user) {
        System.out.println(user);
        this.id = user.getId();
        this.name = user.getName();
        this.email = user.getEmail();
        this.phone = user.getPhone();
        this.headImg = user.getHeadImg();
        this.isVip = user.getVipTime().isBefore(LocalDateTime.now());
    }

}

util RedisObjUtil.java
package com.king.mooc.util;

import com.king.mooc.vo.UserVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundHashOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Repository;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;


@Repository
public class RedisObjUtil {

    @Autowired
    private RedisTemplate redisTemplate;

    
    public void setEntity(String key, Object o) {
        redisTemplate.opsForValue().set(key, o);
    }

    
    public void setEntity(String key, long time, Object o) {
        redisTemplate.opsForValue().set(key, o, time, TimeUnit.MINUTES);
    }

    
    public UserVo getUserVo(String key) {
        return (UserVo) redisTemplate.opsForValue().get(key);
    }

    
    public  T getEntity(String key, Class entity) {
        return (T) redisTemplate.opsForValue().get(key);
    }
 }
测试类
package com.king.mooc.util;

import com.king.mooc.vo.UserVo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import static org.junit.Assert.*;
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class RedisObjUtilTest {
    @Autowired
    RedisObjUtil redisObjUtil;
    @Test
    public void setEntity(){
        UserVo userVo = new UserVo();
        userVo.setEmail("123456789@qq.com");
        userVo.setPhone(12345678941L);
        userVo.setId(1L);
        userVo.setName("test");
        userVo.setHeadImg("F:\Downloads\1.jpg");
        userVo.setIsVip(true);
        userVo.setValidateCode("K25sk");
        redisObjUtil.setEntity("userVo",userVo);
    }

    @Test
    public void getEntity(){
        UserVo userVo = redisObjUtil.getUserVo("userVo");
        System.out.println(userVo);

        UserVo userVo1 = redisObjUtil.getEntity("userVo",userVo.getClass());
        System.out.println(userVo1);
    }
}
运行结果

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号