自定义序列化RedisTemplate

1.实现序列化

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;


/**
 * @Author:hemingzhu
 * @date:2019/05/28 18:47
 * @Explanation:
 */
public class SerializeUtil {

    /*
     * 序列化
     * */
    public static byte[] serizlize(Object object){
        ObjectOutputStream obi=null;
        ByteArrayOutputStream bai=null;
        try {
            bai=new ByteArrayOutputStream();
            obi=new ObjectOutputStream(bai);
            obi.writeObject(object);
            byte[] byt=bai.toByteArray();
            return byt;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    /*
     * 反序列化
     * */
    public static Object deserialize(byte[] bytes){
        ByteArrayInputStream bais = null;
        ObjectInputStream ois = null;
        try{
            bais = new ByteArrayInputStream(bytes);
            ois = new ObjectInputStream(bais);
            return ois.readObject();
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            try {

            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return null;
    }


}

2.重写RedisSerializer接口


import com.herbert.frame.untils.serialize.SerializeUtil;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import org.springframework.util.Assert;
import java.nio.charset.Charset;

/**
 * 实现Redis对象的序列化接口
 * 参考:JdkSerializationRedisSerializer源码
 *
 */
public class KryoRedisSerializer implements RedisSerializer {


    static final byte[] EMPTY_ARRAY = new byte[0];
    private final Charset charset;

    public KryoRedisSerializer() {
        this(Charset.forName("UTF8"));
    }

    public KryoRedisSerializer(Charset charset) {
        Assert.notNull(charset);
        this.charset = charset;
    }

    @Override
    public byte[] serialize(Object object){  //序列化方法
        try {

            return SerializeUtil.serizlize(object);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;

    }

    @Override
    public Object deserialize(byte[] bytes) throws SerializationException { //反序列化

        Object object = null;
        if (bytes == null) {
            return object;
        }
        try {
            object = SerializeUtil.deserialize(bytes);  //返回的是JSONObject类型  取数据时候需要再次转换一下
        } catch (Exception e) {
            e.printStackTrace();
        }
        return object;
    }

} 
  

3.注入bean

 /**
     * 配置RedisTemplate实例
     * @param
     * @return
     */
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate template = new RedisTemplate();
        template.setConnectionFactory(connectionFactory);
        template.afterPropertiesSet();
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new KryoRedisSerializer());
        return template;
    }

 

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