/*
|
* Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
|
*
|
* https://www.mall4j.com/
|
*
|
* 未经允许,不可做商业用途!
|
*
|
* 版权所有,侵权必究!
|
*/
|
package com.yami.trading.common.serializer.redis;
|
|
import com.esotericsoftware.kryo.Kryo;
|
import com.esotericsoftware.kryo.io.Input;
|
import com.esotericsoftware.kryo.io.Output;
|
import lombok.extern.slf4j.Slf4j;
|
import org.redisson.codec.KryoCodec;
|
import org.springframework.data.redis.serializer.RedisSerializer;
|
import org.springframework.data.redis.serializer.SerializationException;
|
|
import java.io.ByteArrayOutputStream;
|
import java.util.Collections;
|
|
/**
|
* 使用Kryo 进行reids的序列化
|
* @author LGH
|
*/
|
@Slf4j
|
public class KryoRedisSerializer<T> implements RedisSerializer<T> {
|
|
private final KryoCodec kryoPool;
|
|
public KryoRedisSerializer() {
|
kryoPool = new KryoCodec(Collections.emptyList(), null);
|
}
|
|
private static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
|
|
|
@Override
|
public byte[] serialize(T t) throws SerializationException {
|
if (t == null) {
|
return EMPTY_BYTE_ARRAY;
|
}
|
|
Kryo kryo = kryoPool.get();
|
|
try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
Output output = new Output(baos)) {
|
kryo.writeClassAndObject(output, t);
|
output.flush();
|
return baos.toByteArray();
|
} catch (Exception e) {
|
log.error(e.getMessage(), e);
|
}
|
|
return EMPTY_BYTE_ARRAY;
|
}
|
|
@Override
|
@SuppressWarnings("unchecked")
|
public T deserialize(byte[] bytes) throws SerializationException {
|
if (bytes == null || bytes.length <= 0) {
|
return null;
|
}
|
Kryo kryo = kryoPool.get();
|
|
try (Input input = new Input(bytes)) {
|
return (T) kryo.readClassAndObject(input);
|
} catch (Exception e) {
|
e.printStackTrace();
|
log.error(e.getMessage(), e);
|
}
|
return null;
|
}
|
}
|